Eklemeli sıralama, en basit sıralama algoritmalarından biridir. Bu yazımızda toplamalı sıralama algoritmasını, algoritmanın girdi ve çıktılarını, Python da implementasyonunu ve algoritmanın zaman karmaşıklığını ele alacağız. Algoritma, girdi olarak bir dizi sayı alır ve çıktı olarak küçükten büyüğe doğru sıralı bir dizi oluşturmak için sayıları sıralar.
Algoritma, her sayıyı en küçükten en büyüğe doğru dizine ekleyerek ve doğru dizine ekleyerek (dolayısıyla adları ekleme sırası) birer birer sıralar. Bir sayı, solundaki sayılar o sayıdan küçükse tamsayı dizinindedir. İndeksteki her sayı için algoritma soldaki sayının bu sayıdan küçük olup olmadığını kontrol eder. Daha küçükse, algoritma bir sonraki dizine geçer.
Aksi takdirde solundaki eleman bu sayıdan daha küçük bir pozisyon bulur. Geçerli sayıyı bu yeni konuma eklemek için, boşluk eklemek için tüm anahtar sayıları bir konum sağa taşır ve ardından sayıyı bu yeni konuma ekler.
Algoritma aşağıdaki adımlarda açıklanmaktadır:
Seviye 1:
Dizin 1 ise, 2. adıma gidin.
Adım 2:
öğeyi seçin. Öğe sıfırsa, geri dönün.
Sahne 3:
Önceki dizindeki öğeyle karşılaştırın.
Dördüncü adım:
Öğe önceki dizindeki öğeden küçükse, yeni konumun solundaki tüm öğeler o öğeden küçük olacak şekilde bir konum bulun. Aksi takdirde, dizini artırın ve 2. adıma geçin.
Beşinci adım:
Bu öğeden daha büyük olan tüm öğeleri geçirin ve geçerli öğenin dizininin soluna doğru bir konum kaydırın.
Altıncı adım:
Öğeyi yeni konumuna yerleştirin. Dizini artırın ve 2. adıma gidin.
Kod kaynağı
define_sort ekle(dizi, n):
# İkinci sıradan
için Kahve içeri Aralık(1n):
# Öğeyi seçin
anahtar = ayarla[ben]
j = kutu – 1
# Soldaki tüm öğelerle bir ipucu bulun
# Bu sayıdan daha az
Süre((Varış[J]> anahtar) E (j >= 0)):
# Büyük öğeleri bir dizin sağa taşı
Varış[j+1] = ar[J]
j = j- 1
# Öğenin konumu
Varış[j+1] = anahtar
dönüş Varış
eğer __isim__ == “__ona__”:
dizi = [2, 1, 8, 6, 4]
n = uzun(Varış)
set = insert_sort(dizi, n)
matbaa (Varış)
Aşağıdaki tablo sıra sırasını göstermektedir [2, 1, 8, 6, 4]
ilk seri: [2, 1, 8, 6, 4]
tekrar 1:
[1, 2, 8, 6, 4]
tekrar et 2:
[1, 2, 8, 6, 4]
tekrar et 3:
[1, 2, 6, 8, 4]
tekrar et 4:
[1, 2, 4, 6, 8]
K iterasyonlarda eleman k+1 konumunda sıralanır (ikinci konumdan başlarız). Böylece, 1… k + 1’lik k yineleme öğesinden sonra sıralanacak ve n’nin girdideki öğe sayısı olduğu n-1 yinelemeden sonra, tüm öğeler sıralanacaktır.
Dış for döngüsü tüm öğeler üzerinde çalışır ve iç while döngüsü yalnızca geçerli öğeden daha büyük ve geçerli öğenin solundaki öğeler üzerinde çalışır. İç döngü O(n) doğrusal zamanına sahiptir.
Ekle, tüm öğeler girişte zaten düzenlendiğinde en iyi sonucu verir. Bu nedenle, O(n) (doğrusal süre) alacaktır çünkü her yinelemede öğeyi bir öncekiyle karşılaştırırız ve bir önceki öğe mevcut olandan daha küçük olur ve algoritma bir sonraki konuma ve iç döngüye geçer. kendi adına değildir.
En kötü durum karmaşıklığı, öğeler ters sırada olduğunda ortaya çıkar. Bu durumda ikinci eleman bir konum sola, üçüncü eleman iki konum sola ve son eleman n-1 sola kaydırılmalıdır. Bu, karesi alınmış bir zaman karmaşıklığı alacaktır (O(n^2)).
Ekleme türünün ara durumunun zaman karmaşıklığı da ikinci derecedendir. Bu nedenle, ekstra sıralama büyük girdiler için verimli değildir. Ancak, algoritma küçük girdi boyutları için en verimlidir. Sıralama artımlı sıralama ile yerinde gerçekleşir, bu nedenle ek alana gerek yoktur.
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın