Driftsort, bir diziyi "sıralamak" için basit bir yoldur. Dizi sıralanıncaya veya dizi sıralanamayana kadar dizideki elemanları "kaydırarak" veya "döndürerek" çalışır.
İki örnek üzerinden geçelim. İlk önce diziyi düşünün [10, 2, 3, 4, 7]
. Dizi sıralanmadığından, bir kere döndürürüz. (Bu, aynı yönde kaldığı sürece her iki yönde de olabilir.) Sonra dizi:
[7, 10, 2, 3, 4]
Bu sıralanmamıştır, bu yüzden tekrar döndürürüz.
[4, 7, 10, 2, 3]
Ve yeniden:
[3, 4, 7, 10, 2]
Ve son bir zaman:
[2, 3, 4, 7, 10]
Ve sıralandı! Yani dizi [10, 2, 3, 4, 7]
sürüklenebilir. Netlik için dizinin tüm dönüşleri:
[10, 2, 3, 4, 7]
[7, 10, 2, 3, 4]
[4, 7, 10, 2, 3]
[3, 4, 7, 10, 2]
[2, 3, 4, 7, 10]
Şimdi dizi düşünün [5, 3, 9, 2, 6, 7]
. Dönmelerine bakın:
[5, 3, 9, 2, 6, 7]
[7, 5, 3, 9, 2, 6]
[6, 7, 5, 3, 9, 2]
[2, 6, 7, 5, 3, 9]
[9, 2, 6, 7, 5, 3]
[3, 9, 2, 6, 7, 5]
Bu dizilerin hiçbiri sıralanmamıştır, bu nedenle dizi [5, 3, 9, 2, 6, 7]
sürüklenemez.
Amaç Bir programa / işleve girdi olarak boş olmayan bir dizi / tamsayı listesi verilmişse, girişte driftsort uygulayın ve çıktılayın ya da sürüklenemiyorsa bir falsey değeri ( veya boş bir dizi / liste) verin. Tamsayılar dilinize max / dak bağlı, ancak bu en az 255, en az 0 olmalıdır.
Yerleşik sıralama yöntemlerini kullanabilirsiniz, ancak zorluğu çözen yerleşik bir yöntemi kullanamazsınız.
Bu bir kod golf , yani bayt cinsinden en kısa program.
Test durumları
input => output
[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]
shiftsort
mı?
shift
bir dizinin ilk öğesini kaldıran işlemle karışıklığa neden olabilir .
sorted(l)
bitişik bir alt liste olup olmadığıdırl+l
.