shell sort c with examples
C ++ 'da Kabuk Sıralama Tekniği: Tam Bir Genel Bakış.
Kabuk sıralama, genellikle eklemeli sıralamaya göre bir gelişme olarak adlandırılır. Eklemeli sıralamada, öğeleri karşılaştırmak ve uygun konumlarına yerleştirmek için 1'er artışlar alırız.
Kabuk sıralamasında, liste birkaç küçük alt listeye bölünerek sıralanır. Listelerin bitişik öğelerle olması gerekli değildir. Bunun yerine, kabuk sıralama tekniği 'boşluk' olarak da adlandırılan artım i'yi kullanır ve onu ayrı 'i' öğeleri olan öğelerin bir listesini oluşturmak için kullanır.
=> Tam C ++ Öğreticiler listesini Keşfetmek İçin Buraya Bakın.
java'da bir öncelik kuyruğu uygulamak
Ne öğreneceksin:
Genel Algoritma
Kabuk sıralama için genel algoritma aşağıda verilmiştir.
shell_sort (A, N)
burada A - sıralanacak liste; N - gap_size
gap_size = N, flag = 1 olarak ayarlayın
gap_size> 1 veya flag = 1 iken, tekrarlayın
başla
bayrak ayarla = 0
gap_size = (gap_size + 1) / 2 olarak ayarlayın
son
i = 0 - i için<(N-gap_size) repeat
başla
eğer A (i + gap_size)> A (i)
takas A (i + gap_size), A (i)
bayrak ayarla = 0
son
son
Böylece, yukarıdaki algoritmada, ilk olarak, A dizisini kabuk sıralaması kullanarak sıralamak için boşluk olan N'yi ayarladık. Bir sonraki adımda, aralığı kullanarak diziyi alt dizilere ayırıyoruz. Sonra bir sonraki adımda, alt dizilerin her birini sıralarız, böylece döngünün sonunda sıralı bir dizi elde ederiz.
Daha sonra, resimli bir temsil kullanarak kabuk sıralamasını daha iyi anlamak için ayrıntılı bir örnek ele alalım.
İllüstrasyon
Kabuk sıralamasını bir Örnek ile gösterelim.
Aşağıdaki 10 öğe dizisini düşünün.
3'lük bir boşluk sağlarsak, her biri 3 öğe ayrı olan aşağıdaki alt listelere sahip olacağız. Daha sonra bu üç alt listeyi sıralıyoruz.
Sıralanan alt listeler ve üç sıralı alt listeyi birleştirdikten sonra elde ettiğimiz sonuç listesi aşağıda gösterilmiştir.
Sıralanmış alt dizileri birleştirdikten sonra elde ettiğimiz yukarıdaki dizi neredeyse sıralanmıştır. Şimdi bu listede ekleme sıralaması yapabilir ve tüm diziyi sıralayabiliriz. Bu son adım, referansınız için aşağıda gösterilmiştir.
Yukarıda görüldüğü gibi, kabuk sıralamayı yaptıktan ve sıralanan alt listeleri birleştirdikten sonra, listeyi tamamen sıralamak için yalnızca üç hareket gerekti. Böylece, diziyi sıralamak için gereken adım sayısını önemli ölçüde azaltabileceğimizi görebiliriz.
Alt listeler oluşturmak için artış seçimi, kabuk sıralamanın benzersiz bir özelliğidir.
C ++ Örneği
Aşağıda, C ++ 'da kabuk sıralama uygulamasına bakalım.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18,24,8,95,101}, i; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Çıktı:
Sıralanacak dizi:
45 23 53 43 18 24 8 95101
Kabuk sıralamasından sonra dizi:
8 18 23 24 43 45 53 95101
Resimde kullandığımız listenin aynısını kullandık ve başlangıçta iki alt liste oluşturarak ve ardından boşluğu daha da daraltarak başladığımızı görüyoruz. Belirlenen boşluğa göre alt listeler oluşturulduktan sonra, her bir alt listeyi sıralarız. Tüm alt listeler sıralandıktan sonra, neredeyse sıralanmış listeyi elde ederiz. Şimdi bu liste, çok az hareket gerektiren temel ekleme sıralaması kullanılarak sıralanabilir.
Ardından, Java dilini kullanarak kabuk sıralaması yapalım.
Java Örneği
// Java class for ShellSort class ShellSort { //function to sort the array using shell sort int sort(int arr()) { int N = arr.length; // Start with a big gap, then narrow the gap for (int gap = N/2; gap > 0; gap /= 2) { //sort sub lists created by applying gap for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } } class Main{ public static void main(String args()) { int arr() = {45,23,53,43,18,24,8,95,101}; int N = arr.length; System.out.println('Array to be sorted: '); for (int i=0; i Çıktı:
Sıralanacak dizi:
45 23 53 43 18 24 8 95101
Kabuk sıralamasından sonra dizi:
8 18 23 24 43 45 53 95101
Hem C ++ hem de Java programlarında kabuk sıralama için aynı mantığı uyguladık. Bu nedenle, yukarıda Java programında açıklandığı gibi, diziyi önce alt dizilere böler ve sonra tam sıralı bir dizi elde etmek için sıralarız.
Sonuç
Kabuk sıralama, ekleme sıralaması üzerinde bir iyileştirme getiren yüksek verimli algoritmadır.
Ekleme sıralaması, öğelerini 1 artırarak çalışırken, kabuk sıralama, diziyi öğeleri 'aralıklı' olan alt dizilere bölmek için 'boşluk' parametresini kullanır. Ardından, sıralı dizinin tamamını elde etmek için, tek tek listeyi ekleme sıralaması kullanarak sıralayabiliriz.
Kabuk sıralama, eklemeli sıralamadan daha hızlı çalışır ve diziyi sıralamak için eklemeli sıralamaya kıyasla daha az hareket gerektirir. Yaklaşan eğitimimiz, veri yapılarını sıralamak için yığın sıralama tekniği hakkında her şeyi keşfedecek.
=> Sıfırdan C ++ Öğrenmek İçin Burayı Ziyaret Edin.
Önerilen Kaynaklar
- Örneklerle C ++ 'da Seçim Sırala
- MongoDB Sort () Yöntemi Örneklerle
- Sözdizimi, Seçenekler ve Örneklerle Unix Sıralama Komutu
- Örneklerle C ++ 'da Kabarcık Sıralama
- Örneklerle C ++ 'da Ekleme Sıralaması
- C ++ 'da Sıralamayı Örneklerle Birleştirme
- Örneklerle C ++ 'da Yığın Sıralama
- Örneklerle C ++ 'da Hızlı Sıralama