Eklemeli Sıralama Algoritması Java Program Örneği ile

⚡ Akıllı Özet

Ekleme sıralaması Java Dizi içindeki sıralı bir bölümü, her seferinde bir eleman oluşturarak ve her anahtar doğru konumuna gelene kadar daha büyük değerleri sağa kaydırarak oluşturur; bu da onu küçük veri kümeleri için ideal hale getirir.

  • 🔘 Tanım: Ekleme sıralama algoritması, bir elemanı kaldırır ve sıralanmış bölümün içindeki doğru yerine yerleştirir.
  • ☑️ Proses: Her geçişte anahtar, önceki değerlerle karşılaştırılır ve daha büyük olanlar bir pozisyon sağa kaydırılır.
  • ✅ Programı: MKS Java Örnek olarak, {860, 8, 200, 9} dizisini sıralar ve her karşılaştırma ve yer değiştirme işlemini yazdırır.
  • 🧪 karmaşıklık: En iyi durum O(n) sürede çalışırken, ortalama ve en kötü durumlar O(n²) sürede çalışır.
  • ️ bellek: Sıralama yerinde gerçekleştiğinden, yardımcı alan herhangi bir dizi boyutu için O(1) seviyesinde kalır.
  • 📊 Davranış: Algoritma istikrarlı ve uyarlanabilir olduğundan, neredeyse sıralı diziler çok az kaydırma işleminden sonra tamamlanır.

Eklemeli Sıralama Algoritması Java

Eklemeli Sıralama Algoritması Nedir?

Eklemeli sıralama, küçük veri kümeleri için uygun olan basit bir sıralama algoritmasıdır. Her yineleme sırasında algoritma:

  • Bir diziden bir öğeyi kaldırır.
  • Bunu, içindeki en büyük değerle karşılaştırır dizi.
  • Öğeyi doğru konuma taşır.

Bu davranış, bir kart oyuncusunun elini düzenleme şeklini yansıtır: her yeni kart alınır ve doğru yere yerleşene kadar her büyük kartın yanından sola doğru itilir. Tüm kaydırmalar orijinal dizi içinde gerçekleştiği için, eklemeli sıralama hem yerinde hem de kararlıdır.

Bu da başlangıç ​​seviyesindeki kullanıcılar için uygun ürünler ailesine aittir. Java sıralama rutinleri olarak kabarcık sıralamasıAncak normalde zaten kısmen sıralı olan veriler üzerinde çok daha az yazma işlemi gerçekleştirir.

Eklemeli Sıralama Algoritması Süreci

Ekleme sıralama algoritması işlemi grafiksel olarak şu şekilde çalışır:

canlandırılmış tracEklemeli sıralama algoritmasının e harfi, sıralanmamış bir listenin yeniden sıralanmasını gösterir.
Eklemeli Sıralama Algoritması Süreci

Animasyon aynı üç adımı tekrarlıyor. Java Aşağıdaki program çalışır. Deneme çalıştırma tablosu tracBu adımları, programın çalışma zamanında yazdırdığı şekilde, {860, 8, 200, 9} örnek dizisi üzerinde aynen uygulayın.

Geçiş Anahtar unsur Yapılan karşılaştırmalar Geçişten sonraki dizi
1 8 8'e 860 (+8) 860 200 9
2 200 200'e 860 (+8) 200 860 9
3 9 9'a karşı 860, sonra 9'a karşı 200 (+8) 9 200 860

Dikkat edin, 3. aşamada iki karşılaştırma yapılması gerekiyor çünkü 9 numaralı anahtarın iki büyük değerin üzerinden geçmesi gerekiyor. Bu nedenle, her bir elemanın başlangıç ​​sırasının ne kadar bozuk olduğuna bağlı olarak karşılaştırma sayısı artar.

Java Eklemeli Sıralama Algoritmasını Kullanarak Bir Diziyi Sıralamak için Program Örneği:

Aşağıdaki program {860, 8, 200, 9} dizisini sıralar ve her karşılaştırma ve her kaydırmanın görünür olması için çalışan bir yorum yazdırır. Programı şu şekilde kaydedin: InsertionSortExample.java ve bunu herhangi bir JDK 8 veya daha yeni sürümüyle derleyin.

package com.guru99;
 
public class InsertionSortExample {
 
	
    public static void main(String a[])
    {    
        int[] myArray  = {860,8,200,9};  
        
        System.out.println("Before Insertion Sort");  
        
        printArray(myArray);
            
        insertionSort(myArray);//sorting array using insertion sort    
           
        System.out.println("After Insertion Sort");  
        
        printArray(myArray);   
    }    
 public static void insertionSort(int arr[]) 
	{  
        int n = arr.length;  
        
        for (int i = 1; i < n; i++)
        {   System.out.println("Sort Pass Number "+(i));
            int key = arr[i];  
            int j = i-1;  
            
            while ( (j > -1) && ( arr [j] > key ) ) 
            {  
            System.out.println("Comparing "+ key  + " and " + arr [j]); 
                arr [j+1] = arr [j];  
                j--;  
            }  
            arr[j+1] = key; 
            System.out.println("Swapping Elements: New Array After Swap");
            printArray(arr);
        }  
    }
 static void printArray(int[] array){
	    
	    for(int i=0; i < array.length; i++)
		{  
			System.out.print(array[i] + " ");  
		} 
	    System.out.println();
	    
	}
}

Sınıfı çalıştırmak şu sonucu üretir: tracBurada gösterilen her biri. Sıralama Geçiş Numarası Her satır, dış döngünün bir yinelemesini işaretler ve her takas işleminden sonra yazdırılan satır, dizinin o anki durumunu gösterir.

Code Çıktı:

Before Insertion Sort
860 8 200 9 
Sort Pass Number 1
Comparing 8 and 860
Swapping Elements: New Array After Swap
8 860 200 9 
Sort Pass Number 2
Comparing 200 and 860
Swapping Elements: New Array After Swap
8 200 860 9 
Sort Pass Number 3
Comparing 9 and 860
Comparing 9 and 200
Swapping Elements: New Array After Swap
8 9 200 860 
After Insertion Sort
8 9 200 860

Eklemeli Sıralama Algoritmasının Zaman ve Alan Karmaşıklığı

Eklemeli sıralama algoritmasının performansı, girdinin zaten ne kadar sıralı olduğuna büyük ölçüde bağlıdır; bu nedenle en iyi durum ve en kötü durum, büyüme açısından tam bir mertebe farkı gösterir.

dava Giriş koşulu Zaman karmaşıklığı
En iyi Dizi zaten sıralı olduğundan, içteki while döngüsü asla çalışmaz. O (n)
Ortalama Elementler rastgele bir sırayla gelir. O(n²)
En kötü Dizi ters yönde sıralanmıştır, bu nedenle her anahtar listenin başına gelir. O(n²)

Alan kullanımı çok daha basit. Sadece sayaçlar. i, j, n hem de key Oluşturulur ve dizi yerinde yeniden düzenlenir, bu nedenle girdi ne kadar büyürse büyüsün yardımcı alan O(1) olur.

İç döngü daha küçük bir değere ulaştığı anda durduğu için, eklemeli sıralama uyarlanabilir olarak tanımlanır: giriş sıralı düzene ne kadar yakınsa, çalışma süresi de doğrusala o kadar yaklaşır.

Eklemeli Sıralamanın Avantajları ve Dezavantajları

Eklemeli sıralama algoritması, ortalama değerinin karesel olmasına rağmen, sabit faktörlerinin çok küçük olması ve davranışının tahmin edilebilir olması nedeniyle üretim kütüphanelerinde varlığını sürdürmektedir.

Avantajlar

  • Yazması basit ve kullanımı kolay. tracElle yazılması, hem öğretim hem de mülakatlar için uygun olmasını sağlar.
  • Kararlı bir yapı olduğundan, aynı anahtarı paylaşan kayıtlar orijinal göreceli sıralarını korur.
  • Yerinde işlem, giriş dizisinin ötesinde yalnızca O(1) ek belleğe ihtiyaç duyar.
  • Uyarlanabilir, zaten neredeyse sıralanmış verilerde O(n) karmaşıklığına ulaşır.
  • Çevrimiçi olması, yeni öğeler gelmeye devam ederken bile bir listeyi sıralayabileceği anlamına gelir.

Dezavantajlar

  • Rastgele veya ters sıralı girişlerde karesel zaman karmaşıklığı, onu büyük diziler için uygunsuz hale getirir.
  • Her kaydırma işlemi diziye veri yazar, bu nedenle seçim sıralamasına göre daha fazla veri taşır.
  • Giriş verisi birkaç düzine elemanı geçtikten sonra, birleştirme sıralaması ve hızlı sıralama onu rahatlıkla geride bırakır.

Pratik bir kural olarak, dizi küçük olduğunda, veriler neredeyse sıralı olduğunda veya böl ve yönet sıralaması bir bölümü birkaç elemana indirgediğinde eklemeli sıralama algoritmasına başvurulmalıdır.

Ekleme Sıralaması vs BubbleSort ve Seçim Sıralaması

Üç algoritmanın tamamı karesel karşılaştırmalı sıralama algoritmalarıdır, ancak kararlılıkları, sıralı girdilere verdikleri tepkiler ve gerçekleştirdikleri yazma sayısı bakımından farklılık gösterirler.

Kriterler Ekleme Sıralaması Bubble Sırala Seçim Sıralaması
En iyi senaryo O (n) erken çıkış bayrağı ile O(n) O(n²)
Ortalama ve en kötü durum O(n²) O(n²) O(n²)
Fazladan boşluk O (1) O (1) O (1)
Kararlı Evet Evet Hayır, standart dizi sürümünde
Adaptif Evet Evet, bayrak optimizasyonu kullanıldığında. Yok hayır
Diziye yazıyor. Çok fazla vardiya, sipariş edilen verilerde az sayıda vardiya. Birçok takas Tam olarak n-1 takas

Yazma işlemi maliyetli olduğunda, en az takas işlemi gerçekleştirdiği için seçim sıralaması kazanır. Ekleme sıralaması ise bu ölçekte neredeyse her yerde, özellikle kısmen sıralı verilerde kazanır; bu nedenle, arkadaki gibi kütüphane sıralama algoritmaları tercih edilir. ortak Java egzersizleri ve JDK'nın iç yapısı çok küçük bölümler için buna geçiş yapıyor.

SSS

İlk eleman tek başına zaten bir uzunluğunda sıralı bir alt dizidir. 1. indeksten başlamak, döngünün her zaman karşılaştıracak bir şeye sahip olduğu anlamına gelir, bu nedenle i konumundaki anahtar, solundaki sıralı bloğa eklenir.

Yapay zekâ asistanları, deneme çalışmasını satır satır anlatabilir, ek test dizileri oluşturabilir ve kaynak koddan Büyük O karmaşıklığını tahmin edebilir. Açıklamayı bir çalışma yardımı olarak değerlendirin ve alıntı yapmadan önce karmaşıklık iddialarını bir ders kitabıyla karşılaştırarak doğrulayın.

Evet. GitHub Yardımcı Pilotu Bir metot imzasından veya yorumundan standart bir eklemeli sıralama işlemini tamamlar. RevSınır koşullarını kendiniz inceleyin, çünkü oluşturulan döngüler bazen j >= 0 veya j > -1 ifadelerini çevreleyen kodla tutarsız bir şekilde kullanır.

İkili eklemeli sıralama, ekleme noktasını doğrusal tarama yerine ikili arama ile bulur ve eleman başına karşılaştırma sayısını O(n)'den O(log n)'ye düşürür. Kaydırma işlemi değişmediğinden, genel zaman karmaşıklığı O(n²) olarak kalır.

Evet. Özyinelemeli sürüm, ilk n-1 elemanı sıralar, ardından son elemanı bu sıralanmış öneke ekler. Yinelemeli sürümün zaman karmaşıklığına eşittir ancak O(n) yığın alanı ekler, bu nedenle pratikte döngülü sürüm tercih edilir.

Kısmen. Temel veri tipleri için kullanılan çift pivotlu hızlı sıralama, çok küçük bölümlerde eklemeli sıralamaya geri döner ve nesneler için kullanılan TimSort, birleştirmeden önce kısa dizileri ikili eklemeli sıralama ile sıralar.

Sık karşılaşılan hatalar arasında dış döngüyü 0'dan başlatmak, arr[j] = key yerine arr[j+1] = key yazmak ve j > -1 korumasını atlamak yer almaktadır; bu durum, anahtarın sıfır konumunda olması gerektiğinde ArrayIndexOutOfBoundsException hatasına neden olur.

Evet. Comparable türü için büyüktür testini compareTo ile veya Comparator çağrısıyla değiştirin. Kaydırma mantığı değişmez ve istikrar korunur; bu da nesnelerin aynı sıralama anahtarını paylaştığı durumlarda önemlidir.

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