C ile Ekleme Sıralama Algoritması, C++, Java, Python Örnekler

⚡ Akıllı Özet

Ekleme Sıralaması, karşılaştırmaya dayalı, yerinde sıralama yapan ve sıralı bir listeyi tek tek elemanlar ekleyerek oluşturan bir sıralama yöntemidir. Kararlı, uyarlanabilir, uygulaması basit ve pratikte küçük veya neredeyse sıralı veri kümeleri için oldukça uygundur.

  • 📥 Ana düşünce: Ekleme Sıralaması, her bir elemanı seçer ve önceden sıralanmış alt listede doğru konumuna gelene kadar sola kaydırır.
  • 🔁 Ekle Operation: Algoritma, tekrarlanan solla değiştirme karşılaştırmalarıyla çalışır ve sıralanmış bölgeyi her dış döngü geçişinde bir eleman artırarak genişletir.
  • Zaman Karmaşıklığı: En iyi senaryoda, zaten sıralanmış veriler için O(n) sürede çalışırken, en kötü ve ortalama senaryolarda ters çevrilmiş veya karışık girdiler için O(n^2) sürede çalışır.
  • Özellikler: Algoritma çevrimiçi, yerinde, kararlı ve uyarlanabilir olduğundan, akış halindeki eklemeler ve kısmen sıralı diziler için öngörülebilir sonuçlar verir.
  • 🧪 Code Kapsam: Referans uygulamaları C dilinde sağlanmıştır. C++, ve Python Böylece öğrenciler döngü yapılarını ve değişim mekanizmalarını yan yana karşılaştırabilirler.
  • 🤖 Yapay Zeka Açısı: Modern yapay zeka asistanları, Ekleme Sıralama algoritmasının geçişlerini görselleştirir ve girdi dizileri kısa veya neredeyse sıralı olduğunda bu algoritmayı önerir.

Eklemeli Sıralama nedir?

Ekleme Sıralaması, elemanları tek tek işleyerek ve sıralanmış bir bölge içindeki doğru konumuna yerleştirerek sıralama yapan karşılaştırmalı sıralama algoritmalarından biridir.

Her eleman, önceden sıralanmış bir listeye sırayla eklenir. Başlangıçtaki sıralanmış listenin boyutu birdir. Ekleme Sıralama algoritması, dış döngünün k. iterasyonundan sonra ilk k elemanın sıralanmasını sağlar.

Eklemeli Sıralama algoritması sonucu artımlı olarak oluşturduğu için, öğretilmesi sezgiseldir, hata ayıklaması kolaydır ve daha karmaşık algoritmaların ölçülebilir kazanımlar olmadan ek yük getireceği çok küçük girdiler için güçlü bir temel oluşturur.

Eklemeli Sıralama Algoritmasının Özellikleri

Ekleme sıralama algoritmasının gerçek iş yüklerindeki davranışını açıklayan aşağıdaki önemli özellikleri vardır:

  • Kararlı bir sıralama tekniği olduğundan eşit elemanların göreceli sırasını değiştirmez.
  • Bu yöntem küçük veri kümeleri için etkilidir ancak karesel büyümenin baskın olduğu daha büyük listeler için etkili değildir.
  • Ekleme Sıralama algoritması uyarlanabilir bir algoritmadır; yani girdi kısmen sıralıysa toplam adım sayısını azaltır. Dizi İç döngü sırasında sabit zamanlı kaydırmalara olanak sağlayan rastgele erişim sayesinde, verimliliği artırmak için girdi olarak sağlanır.
  • Bu, yerinde işlem yapan bir algoritmadır, bu nedenle giriş boyutuna orantılı ek depolama alanı gerektirmez.

Bu özellikler göz önünde bulundurularak, bir sonraki bölümde algoritmanın her aşamasını çalıştıran temel ekleme işlemi açıklanmaktadır.

Insert nasıl yapılır? Operaiş mi?

Ekleme Sıralama algoritmasında, sıralanmamış elemanları sıralamak için ekleme işlemi kullanılır. Bu işlem, sıralanmış bölgenin mevcut sırasını koruyarak, zaten sıralanmış bir listeye yeni bir eleman eklemeye yardımcı olur.

Ekleme işleminin sözde kodu:

N elementten oluşan bir A listesi düşünün.

// Insert A[N-1] into sorted sublist A[0..N-2]
for i = N-1 to 1:
    if A[i] < A[i-1], then swap A[i] and A[i-1]
    else stop

Ekle Operaiş

Yukarıdaki örnekte, zaten sıralanmış bir listeye 6 numaralı yeni bir eleman eklenmiştir. Aşağıdaki adımlar izlenecektir. tracYeni eleman doğru konumuna doğru sola doğru hareket ederken iç döngüyü inceleyin.

) 1 Adım A[5], 9 > 6'nın sol komşu elemanıyla karşılaştırıldığında, 9 ve 6'nın konumunu değiştiririz. Şimdi 6. eleman A[4]'e taşınır.

) 2 Adım Şimdi A[4] ve A[3]'ü karşılaştırıyoruz ve A[3] > A[4] olduğunu görüyoruz, bu yüzden 6 ve 8'in konumlarını tekrar değiştiriyoruz.

) 3 Adım Şimdi A[3] ve A[2]'yi karşılaştıralım. A[2] > A[3] olduğundan, 7 ve 6'nın konumlarını değiştiriyoruz.

) 4 Adım A[1] ve A[2]'yi karşılaştırıyoruz. A[1] < A[2] olduğundan, soldaki bitişik eleman artık daha büyük değildir. 6'nın doğru şekilde eklendiği sonucuna varıyoruz ve iç döngüyü burada durduruyoruz.

Eklemeli Sıralama Nasıl Çalışır?

Yukarıda bahsedilen ekleme işlemi, Ekleme Sıralama algoritmasının temelini oluşturur. Ekleme işlemi her eleman üzerinde gerçekleştirilir ve sonunda, sıralanmış bölge her dış geçişte bir eleman daha büyüdüğü için sıralanmış liste elde edilir.

Eklemeli Sıralama Çalışmaları

Yukarıdaki şekil, bir veri yapısında Ekleme Sıralama algoritmasının çalışma şeklini göstermektedir. Başlangıçta, sıralanmış alt listede yalnızca bir eleman bulunur, yani 4. A[1], yani 3 eklendikten sonra, sıralanmış alt listenin boyutu 2'ye yükselir ve algoritma, her eleman yerleştirilene kadar bu deseni sürdürür.

Kavramsal akış oluşturulduktan sonra, aşağıdaki bölümlerde somut uygulamalar gösterilmektedir. C++, C ve Python Böylece farklı dillerdeki döngü yapılarını karşılaştırabilirsiniz.

C++ Eklemeli Sıralama Programı

MKS C++ Aşağıdaki uygulama iki iç içe döngü kullanır: dış döngü bir sonraki sıralanmamış öğeyi seçer ve iç döngü doğru konum bulunana kadar onu sola kaydırır.

#include <iostream>
using namespace std;

int main(){
    //unsorted list
    int unsorted[] = {9,8,7,6,5,4,3,3,2,1};

    //size of list
    int size_unsorted = sizeof(unsorted) / sizeof(unsorted[0]);

    //printing unsorted list
    cout << "\nUnsorted: ";
    for(int i = 0 ; i < size_unsorted ; i++){
        cout << unsorted[i] << " ";
    }

    int current_element,temp;

    for(int i = 1; i < size_unsorted; i++){
        current_element = unsorted[i];
        for(int j = i-1; j >= 0 && unsorted[j] > current_element; j--){
            //swapping if current element is lesser
            temp = unsorted[j+1];
            unsorted[j+1] = unsorted[j];
            unsorted[j] = temp;
        }
    }

    //printing sorted list
    cout << "\nSorted: ";
    for(int i = 0 ; i < size_unsorted ; i++){
        cout << unsorted[i] << " ";
    }

    return 0;
}

Çıktı:

Unsorted: 9 8 7 6 5 4 3 3 2 1
Sorted: 1 2 3 3 4 5 6 7 8 9

C Code Ekleme Sıralaması için

Aynı mantık doğrudan C diline de uygulanabilir. Standart printf Çağrılar akış çıktısını değiştirir, ancak iç döngüdeki takas deseni aynıdır. C++ sürümü.

#include <stdio.h>
int main() {
    //unsorted list
    int unsorted[] = {9,8,7,6,5,4,3,3,2,1};

    //size of list
    int size_unsorted = sizeof(unsorted) / sizeof(unsorted[0]);

    //printing unsorted list
    printf("\nUnsorted: ");
    for(int i = 0 ; i < size_unsorted ; i++){
        printf("%d ", unsorted[i]);
    }

    int current_element, temp;

    for(int i = 1; i < size_unsorted; i++){
        current_element = unsorted[i];
        for(int j = i-1; j >= 0 && unsorted[j] > current_element; j--){
            //swapping if current element is lesser
            temp = unsorted[j+1];
            unsorted[j+1] = unsorted[j];
            unsorted[j] = temp;
        }
    }

    //printing sorted list
    printf("\nSorted: ");
    for(int i = 0 ; i < size_unsorted ; i++){
        printf("%d ", unsorted[i]);
    }

    return 0;
}

Çıktı:

Output:
Unsorted: 9 8 7 6 5 4 3 3 2 1
Sorted: 1 2 3 3 4 5 6 7 8 9

Python Eklemeli Sıralama Programı

Python demet değişimini desteklerping tek bir ifadede, bu nedenle iç döngü C ve diğer döngülerden daha kompakttır. C++ Aynı algoritmik davranışı korurken, benzerlerine de uyum sağlamak.

#unsorted list
unsorted = [9,8,7,6,5,4,3,3,2,1]

#size of list
size_unsorted = len(unsorted)

#printing unsorted list
print("\nUnsorted: ", end="")
for i in range(size_unsorted):
    print(unsorted[i], end=" ")

for i in range(1, size_unsorted):
    current_element = unsorted[i]
    j = i - 1
    while j >= 0 and unsorted[j] > current_element:
        #swapping if current element is lesser
        unsorted[j+1], unsorted[j] = unsorted[j], unsorted[j+1]
        j -= 1

#printing sorted list
print("\nSorted: ", end="")
for i in range(size_unsorted):
    print(unsorted[i], end=" ")

Çıktı:

Unsorted: 9 8 7 6 5 4 3 3 2 1
Sorted: 1 2 3 3 4 5 6 7 8 9

Eklemeli Sıralamanın Özellikleri

İşte, eklemeli sıralama algoritmasının ne zaman doğru araç olduğuna karar vermenize yardımcı olacak önemli özellikleri:

  • İnternet üzerinden: Ekleme Sıralaması, elemanları aldığı anda sıralayabilir. Eğer bir eleman listesini zaten sıraladıysak ve listeye daha fazla eleman eklediysek, tüm sıralama işlemini tekrar çalıştırmamıza gerek yoktur. Bunun yerine, yalnızca yeni eklenen elemanlar üzerinde yineleme yaparız.
  • Yerinde: Eklemeli Sıralama algoritmasının alan karmaşıklığı sabittir ve ek alan gerektirmez. Bu algoritma elemanları yerinde sıralar.
  • Kararlı: Ekleme Sıralama algoritmasında, değerleri eşit olan elemanların yerlerini değiştirmeyiz. Örneğin, x ve y olmak üzere iki eleman eşitse ve sıralanmamış listede x, y'den önce geliyorsa, sıralanmış listede de x, y'den önce gelmeye devam edecektir. Bu da Ekleme Sıralama algoritmasını kararlı kılar.
  • Uyarlanabilir: A sıralama algoritması Giriş elemanları veya elemanların bir alt kümesi zaten sıralı olduğunda daha az zaman alıyorsa, bir algoritma uyarlanabilir olarak adlandırılır. Yukarıda tartıştığımız gibi, Ekleme Sıralama algoritmasının en iyi çalışma süresi O(N), en kötü çalışma süresi ise O(N^2)'dir. Ekleme Sıralama, uyarlanabilir sıralama algoritmalarından biridir.

Ekleme Sıralamasının Karmaşıklığı

Aşağıdaki karmaşıklık tartışması, hem bellek kullanımını hem de çalışma süresini kapsamakta olup, Ekleme Sıralama algoritmasını aşağıdaki gibi alternatiflerle karşılaştırabilmeniz için değerlendirebilirsiniz. Bubble Sırala hem de Hızlı sıralama.

Uzay Karmaşıklığı

Ekleme Sıralaması, elemanları sıralamak için ek alana ihtiyaç duymaz. Alan karmaşıklığı sabittir, yani O(1), çünkü giriş boyutundan bağımsız olarak yalnızca birkaç geçici değişken kullanılır.

Zaman Karmaşıklığı

Eklemeli Sıralama algoritması her seferinde bir eleman üzerinde çalıştığı için, N elemanı sıralamak için N-1 geçiş gerektirir. Her geçişte, elemanlar zaten sıralıysa sıfır takas yapabilir veya elemanlar azalan sırada düzenlenmişse birçok takas gerekebilir.

  • Geçiş 1 için gereken minimum takas sayısı sıfırdır ve gereken maksimum takas sayısı 1'dir.
  • Geçiş 2 için gereken minimum takas sayısı sıfırdır ve gereken maksimum takas sayısı 2'dir.
  • N geçişi için gereken minimum takas sıfırdır ve gereken maksimum takas N'dir.
  • Minimum takas sıfırdır, bu nedenle N geçişi yinelemek için en iyi zaman karmaşıklığı O(N)'dir.
  • Toplam maksimum takas sayısı (1+2+3+4+…+N) yani N(N+1)/2 olduğundan, en kötü zaman karmaşıklığı O(N^2)'dir.

İşte Ekleme Sıralama algoritmasının önemli zaman karmaşıklığı:

  • En Kötü Durum KarmaşıklığıO(n^2): Artan sırada sıralanması gereken bir dizinin azalan sırada sıralanması en kötü senaryodur.
  • En İyi Durum Karmaşıklığı: O(n): En iyi durum, dizinin zaten sıralı olduğu zaman gerçekleşir; dış döngü n kez çalışırken, iç döngü hiç çalışmaz. Sadece n karşılaştırma olduğundan, karmaşıklık doğrusaldır.
  • Ortalama Vaka Karmaşıklığı: O(n^2): Bu, dizinin elemanlarının ne artan ne de azalan bir düzende karışık bir şekilde sıralanması durumunda meydana gelir.

SSS

Küçük diziler, neredeyse sıralı veriler veya ilk sıralamadan sonra yeni öğelerin geldiği akışlı eklemeler için Ekleme Sıralaması'nı seçin. Düşük sabit yükü ve uyarlanabilir davranışı, bu iş yüklerinde genellikle daha karmaşık algoritmalardan daha iyi performans gösterir.

Evet. Ekleme Sıralaması kararlıdır çünkü asla eşit değerleri değiştirmez ve orijinal sıralarını korur. Ayrıca yerinde sıralama yapar çünkü yalnızca giriş dizisini ve az sayıda sabit geçici değişkeni kullanarak sıralama yapar ve O(1) yardımcı alan sağlar.

En iyi durum, giriş zaten sıralı olduğunda O(n)'dir çünkü iç döngü asla çalışmaz. Dizi ters sıralı veya karışık olduğunda, elemanların dizinin başına doğru tekrar tekrar kaydırılması nedeniyle en kötü ve ortalama durumlar O(n^2)'dir.

Yapay zekâ asistanları, her geçiş için geçerli öğeyi, sıralanmış bölgeyi ve karşılaştırma işaretçisini işaretleyen adım adım animasyonlar ve tablolar oluşturur. Bu görselleştirme, öğrenenlere yardımcı olur. trace takaslarını kontrol eder, bir eksik olan hataları tespit eder ve sıralanmış önekin her dış yinelemede bir eleman arttığını doğrular.

Evet. Yapay zeka destekli seçiciler, dizi boyutunu, dağılımını ve önceden sıralanmışlığını inceler, ardından küçük veya neredeyse sıralanmış girdileri Ekleme Sıralamasına yönlendirirken, daha büyük rastgele girdileri Hızlı Sıralama veya Birleştirme Sıralamasına yönlendirir. Timsort gibi hibrit algoritmalar, bu fikri zaten iç bölümlerinde uygulamaktadır.

Ekleme Sıralaması, sıralanmış bölgeyi her yeni elemanı doğru konuma ekleyerek oluştururken, Seçme Sıralaması ise sıralanmamış bölgenin minimumunu tekrar tekrar bulup ekler. Ekleme Sıralaması uyarlanabilir ve kararlıdır; standart Seçme Sıralaması uyarlanabilir değildir ve doğal olarak kararlı değildir.

Bu yazıyı şu şekilde özetleyin: