Menu
Coddy logo textTech

Ekleme Sıralaması

Son güncelleme

Ekleme sıralaması, sıralı diziyi her seferinde bir eleman ekleyerek oluşturur. Sıralanmamış bir sonraki elemanı ("anahtar") alır ve sıralı bölgedeki kendisinden büyük her elemanı bir yuva sağa kaydırır, ardından anahtarı boşluğa yerleştirir. Bu tam olarak çoğu insanın elindeki oyun kartlarını sıralama biçimidir. Her anahtarın nasıl eklendiğini izlemek için yukarıdan oynat'a basın veya kaydırmaları teker teker ilerleyin.

Ekleme sıralaması küçük veya neredeyse sıralı girdilerde çok hızlıdır - veriler zaten sıralıyken O(n) sürede çalışır - bu yüzden birçok hibrit sıralama küçük alt diziler için ona başvurur.

Zaman ve alan karmaşıklığı

DurumKarmaşıklıkNotlar
En iyi durumO(n)Zaten sıralı
Ortalama durumO(n²)Rastgele sıra
En kötü durumO(n²)Ters sıralı
AlanO(1)Yerinde
KararlıEvetEşit elemanlar göreli sıralarını korur

Adım adım

AdımNe olur
1İlk elemanı boyutu bir olan sıralı bir bölge olarak kabul et.
2Bir sonraki elemanı anahtar olarak al.
3Sıralı bölgede anahtardan büyük her elemanı bir yuva sağa kaydır.
4Anahtarı açılan boşluğa ekle.
5Her eleman eklenene kadar tekrarla.

Çözümlü örnek

[5, 2, 4, 1] sıralanıyor:

GeçişDiziEylem
Başlangıç[5, 2, 4, 1]5, boyutu bir olan başlangıç sıralı bölgesidir.
1[2, 5, 4, 1]Anahtar 2: 5'i sağa kaydır, 2'yi başa ekle.
2[2, 4, 5, 1]Anahtar 4: 5'i sağa kaydır, 2 küçük olduğu için dur, 4'ü ekle.
3[1, 2, 4, 5]Anahtar 1: 5, 4, 2'yi sağa kaydır, 1'i başa ekle.
Bitti[1, 2, 4, 5]Tüm elemanlar eklendi; dizi sıralı.

Ekleme sıralaması ne zaman kullanılır

Şu durumda kullanŞu durumda kaçın
Dizi küçük olduğunda (yaklaşık n < 20).Dizi büyük ve rastgele sıralı olduğunda.
Veriler zaten neredeyse sıralı olup O(n) en iyi durumu verdiğinde.Garantili bir O(n log n) en kötü duruma ihtiyaç duyduğunda.
O(1) ek alanla kararlı, yerinde bir sıralamaya ihtiyaç duyduğunda.Elemanları taşımak maliyetli olduğunda, çünkü çok sayıda kaydırma yapar.
Veriler artımlı olarak geldiğinde ve çevrimiçi sıralı kalması gerektiğinde.Girdi ters sıralı olduğunda, O(n²) en kötü durumu.

Insertion Sort kodu

Python, JavaScript, Java, C++, C dillerinde temiz ve çalıştırılabilir bir Insertion Sort uygulaması. Bir dil seçin, kodu kopyalayın veya Coddy Playground'da hazır yüklenmiş olarak açın.

Python ile Insertion Sort kodu

Python
1def insertion_sort(a):2    for i in range(1, len(a)):3        key = a[i]4        j = i - 15        # Shift larger elements one slot to the right6        while j >= 0 and a[j] > key:7            a[j + 1] = a[j]8            j -= 19        a[j + 1] = key10    return a11
12
13nums = [7, 3, 9, 1, 5, 8, 2]14print("Before:", nums)15insertion_sort(nums)16print("After: ", nums)
Bu kodu Python Playground'da çalıştır

Ekleme Sıralaması SSS

Ekleme sıralamasının zaman karmaşıklığı nedir?
Ekleme sıralaması ortalamada ve en kötü durumda O(n²), ancak zaten sıralı veya neredeyse sıralı bir dizide O(n)'dir. O(1) ek alan kullanır.
Ekleme sıralaması kararlı mıdır?
Evet. Ekleme sıralaması yalnızca anahtardan kesinlikle büyük olan elemanları kaydırır, bu yüzden eşit elemanlar birbirinin önüne geçmez ve göreli sıraları korunur.
Ekleme sıralamasını ne zaman kullanmalıyım?
Küçük diziler veya zaten neredeyse sıralı olan veriler için kullanın. Düşük ek yükü ve uyarlanabilir en iyi durumu sayesinde, Timsort gibi hibrit algoritmalar küçük parçalar için onu kullanır.
Ekleme sıralaması ile kabarcık sıralaması arasındaki fark nedir?
İkisi de O(n²) karşılaştırmalı sıralamalardır, ancak ekleme sıralaması anahtar için bir boşluk açmak amacıyla elemanları kaydırır, kabarcık sıralaması ise sırasız komşu çiftleri tekrar tekrar takas eder. Ekleme sıralaması genellikle daha az yazma yapar ve pratikte, özellikle O(n) en iyi durumuna ulaştığı neredeyse sıralı verilerde, daha iyi performans gösterir.
Ekleme sıralaması küçük dizilerde neden birleştirme sıralamasından daha hızlıdır?
Ekleme sıralamasının sabit çarpan ek yükü çok düşüktür ve özyineleme ya da ek bellek ayırma içermez, bu yüzden küçük girdilerde daha kötü asimptotik karmaşıklığına rağmen O(n log n) sıralamaları geçer. Timsort ve introsort gibi hibrit sıralamaların küçük alt diziler için ekleme sıralamasına geçmesinin nedeni tam olarak budur.
Ekleme sıralaması bağlı liste ile mi yoksa dizi ile mi daha iyi çalışır?
Ekleme sıralaması normalde diziler için yazılır; burada elemanları kaydırmak ana maliyettir. Bağlı listede düğümü yerine ekleyerek kaydırmadan kaçınırsınız, ancak hızlı rastgele erişimi kaybedersiniz, bu yüzden ekleme noktasını bulmak eleman başına yine doğrusal zaman alır ve toplam maliyet O(n²) olarak kalır.
Coddy programming languages illustration

Coddy ile algoritmalarda ustalaş

BAŞLA