Algoritma muharebe-OC Hill sıralama (2)

Bu algoritma için hiçbir şey yapmadım ve benim adım algoritma adına geçmemeli. ---- Hill (kabuk sıralama yazarı)

Hill, tasarımcısı Hill'e (Donald Shell) göre sıralandı Algoritmadan sonra isimlendirildi 1959'da duyuruldu . Marlene Metzner Norton'un adını içeren Shell-Metzner algoritması olarak adlandırılan bazı eski ders kitapları ve referans kılavuzları, Ancak Metzner'e göre, "Bu algoritma için hiçbir şey yapmadım ve benim adım algoritma adına görünmemeli."

---- O zamanlar ünlüler çok mütevazıydı.

İlk. Tanım

Tepe sıralaması , Artımlı sıralama algoritmasının azaltılması olarak da bilinir, Ekleme sıralaması Daha verimli ve geliştirilmiş. Tepe sıralama, kararsız bir sıralama algoritmasıdır.

Tepe sıralaması, Ekleme sıralaması Aşağıdaki iki özellikten İyileştirilmiş yöntem **:

1. Ekleme sıralaması, neredeyse sıralanmış veriler üzerinde çalışırken oldukça etkilidir, yani doğrusal sıralamanın verimliliğini sağlayabilir

2. Ancak, ekleme sıralaması genellikle verimsizdir, çünkü eklemeli sıralama verileri bir seferde yalnızca bir bit taşıyabilir.

İkinci: Ekleme sıralaması

Bahsedildiğinden beri Ekleme sıralaması , Önce ekleme sıralamayı öğrenelim; şu şekilde çalışır: Sıralı bir sıra oluşturarak, sıralanmamış veriler için, karşılık gelen konumu bulmak ve eklemek için sıralı sırayla arkadan öne doğru tarayın.

Bir resmin bin kelimeye bedel olduğunu söylemek için, anlaşılması en kolay olduğunu düşündüğüm bir resim:

Wikipedia-Ekleme Sıralamasından

Yukarıdaki resmi açıklayın:

1. İlk öğeden başlayarak, öğenin sıralanmış olduğu düşünülebilir;

2. Bir sonraki öğeyi çıkarın ve bir öncekinden büyük veya ona eşit sayıyı bulana kadar önceki öğeyle karşılaştırın, durun ve ardından karşılaştırmadan sonra sayıyı taşıyın;

3. Yeni elemanı bu konuma yerleştirin,

Doğrudan OC koduna gidin ve ardından Hill sıralamasıyla github'a yerleştirilecektir:

/ **

* Ekleme sıralaması

* / - (void) algoritması_InsertSortWith: (NSMutableArray *) array {

// İlk sayıyı kıyaslama olarak düşünün, bu yüzden 1'den başlıyorum

for (int i = 1; i < array.count; i ++) {// Bulunacak numara

int temp =; // Son konumlanan sayının önceki basamağından her seferinde karşılaştırın ve uygun bir konum bulana kadar ileriye bakmaya devam edin < Önceki sayıdan büyük veya ona eşit > ,

for (int j = i-1; j > = 0 sıcaklık < ; j -) {// Kalifiye olmayan tüm numaralar geriye taşınır

array = array; // Son olarak nitelenmiş sayının konumunu belirleyin

dizi =;

}

}

NSLog (@ "Sıralanan dizi:% @", dizi);

}

Üçüncü. Analiz

Hill sıralamasının nedeni hakkında konuşalım.

1. Ekleme sıralaması, neredeyse sıralanmış olan veriler üzerinde çalışırken oldukça etkilidir, yani doğrusal sıralamanın verimliliğini sağlayabilir;

2. Ancak, ekleme sıralaması genellikle verimsizdir, çünkü eklemeli sıralama verileri bir seferde yalnızca bir bit taşıyabilir.

Bunun ana nedeni, gözlerinizi hoş karşılamayan zaman karmaşıklığı O (n²).

GIF sohbet için ayrılamaz, burada nasıl daha az olabilir! GIF resmi sayesinde, öncekilerin müthiş nefesini hissedebilirsiniz!

Tepe sıralaması Karşılaştırarak Tüm öğeler İyileştirmek için birkaç alana bölündü Ekleme sıralama performansı . Yani, veriler iki boyutlu bir dizide alanlara bölünebilir, Bölge başına bir sütun , Ve sonra her sütunu sıralayın.

Sıralanacak dizi --- , Önce adım uzunluğunu 3 olarak ayarlayın, Adım uzunluğunu daha sonra görün

Örnek bir

İlk gruplama < Adım boyutu == 3 > Orijinal veriler

9, 1, 5

8, 3, 7

4, 6, 2

İlk ayıklamadan sonra;

4, 1, 2

8, 3, 5

9, 6, 7

İkinci gruplama < Adım boyutu == 2 > Orijinal veriler;

4, 1

2, 8

3, 5

9, 6

7

İkinci türden sonra;

yirmi bir

3, 5

4, 6

7, 8

9

Üçüncü gruplama adımı == 1, sıralamadan sonra

Örnek iki

Yukarıdaki adımları resim şeklinde gösterin:

Anahtar nokta - adım hesaplama

Yukarıdaki ekleme sıralama yoluyla ve Tepe sıralaması Örneğin, Hill sınıflandırmasına ilişkin bir ön anlayışa sahip olmalıyım, ancak Adım Bu şey tamamen belirsiz ... Merak etmeyin;

Çünkü Adım boyutu seçimi, Hill sınıflandırmasının önemli bir parçasıdır Öyleyse onu çıkarın ve ayrı olarak açıklayın; yazarın orijinal önerisi Son adım 1 olana kadar ikiye ve sonra ikiye katlayın. < Ekleme sıralaması > , Ancak daha küçük bir adım boyutuyla sıralama yaparken, daha önce kullanılan daha büyük adım boyutu hala sıralıdır. , Bir dizi adım uzunluğu 5'e göre sıralanır ve ardından adım uzunluğu 3'e göre sıralanırsa, bu sıra yalnızca adım uzunluğu 3'e göre değil, aynı zamanda adım uzunluğu 5'e göre de sıralanır. Durum böyle değilse, algoritma yineleme işlemi sırasında önceki sıralamayı bozacak ve sıralama bu kadar kısa sürede tamamlanmayacaktır. Wikipedia'dan alıntı

En iyi bilinen adım dizisi Sedgewick tarafından önerilmiştir ** 1, 5, 19, 41, 109, ... **

İki dizinin öğelerinin araya eklenmesiyle elde edilir: < Formül: 9 (4 K-2 K) + 1 ve 2 K + 2 (2 K + 2-3) + 1 >

1, 19, 109, 505, 2161, ... ..., || 9 (4 k-2 k) + 1, K = 0, 1, 2, 3, ...

5, 41, 209, 929, 3905, ... .. || 2 K + 2 (2 K + 2-3) + 1, K = 0, 1, 2, 3, ...

Bu çalışma aynı zamanda, "karşılaştırmanın Hill sınıflandırmasında en önemli işlem olduğunu, değiş tokuş değil" olduğunu göstermektedir. Böyle bir aşamalı sırayla tepe sıralaması, yerleştirmeli sıralamadan daha hızlıdır ve hatta küçük dizilerde hızlı sıralama ve yığın ayırmadan daha hızlıdır. Hızlı, ancak Hill sıralama, büyük miktarda veri söz konusu olduğunda hızlı sıralamadan daha yavaştır. Algorithms-Shellsort'u Sıralama konusuna bakın

OC Hill sıralama kodu

- (void) algoritma_shellSortWith: (NSMutableArray *) array {

//Toplam uzunluk

int n = (int) array.count; // Döngü için en dıştaki adım sayısı belirlenir < Adım uzunluğu 1'e eşit olana kadar ikiye katlayın >

for (int gap = n / 2; gap > 0; boşluk / = 2) {

NSLog (@ " ----% d", boşluk); // Adım uzunluğuyla ayrılmış bir çift sayının sonunu belirleyin.

for (int i = boşluk; i < n; i ++) {

NSLog (@ "% d konumu ile% d konumu arasındaki karşılaştırma", i-boşluk, i); // önceki çifti bul, artı değerlendirme < İlkinden başlayın > < Artan azalan > , j - = boşluk, grup içinde sırala

for (int j = i-gap; j > = 0 dizi > dizi; j - = boşluk) {

! // Pozisyon değişimi

;

}

}

}

NSLog (@ "----% @", dizi);

}

Yine de halletmem gerekiyor .....

Daha heyecan verici içerik için lütfen "IT Actual Combat Alliance" a dikkat edin ~~~

Lu Ödülü Yazarı Röportaj Dizisi 80 Ma Jinlian, 80'ler sonrası Lu Ödülü yazarı: Kuzeybatı topraklarında kök salmak, edebiyatla nezaket tasvir etmek
önceki
Nodej'ler, eşzamansız G / Ç ve eşzamansız programlama makaleleriyle savaşır
Sonraki
Lei Jun'un başı yine dertte ve dünya rekoruna meydan okumak istiyor! Dong Mingzhu'ya bahse girip giremeyeceğinizle ilgili! Günaydın Wuhan
Bin Yıllık Yongling (6) Bir yılda 24 şehri ziyaret eden Chengdu Yongling Müzesi, Beş Hanedanı ve On Krallığı yorumlamak için yeni bir kitap yayınlar
Emlak satan Luke Shaw, altı yatak odalı gümüş temalı konağını satıyor
Mimari Uygulama Bölümü (1) -Spring Boot + MyBatis Altyapı İnşaatı
Orta İtalya Deneyim Turunun ilk durağı: Lazio'yu Keşfedin
Toplulukta gizlenmiş 80'den fazla küçük otel var, neden üç ay sonra neredeyse kayboldular?
Gates Vakfı, yoksulluk ve haklar gibi "zor konularla" yüzleşmek için yıllık bir açık mektup yayınlamaktadır.
KNW Super Little Warrior: Çin'deki ilk çocuk engel eğitim kampı, daha fazla çocuğun bilim sporlarına aşık olmasına izin verin
Hintli "ulusal hazine" erkek yıldız "Wuhan oldukça sağlam" dedi ve bir Çin filmi yapmak istediğini söyledi.
Hava güzel, Chengdu Jinli Orta Yolu, ginkgo'yu fotoğraflayan vatandaşlar yığıldı
Son 5 dakikada skor eşitlendi ve halka açık konferans salonu, kampüs futbolundan çocuklara pes etmemeyi öğretmekten bahsetti.
Genç Çinli bilim adamları hamamböceklerinin yürüyüşünü inceledi ve çok bacaklı bir robot yürüyüşü ve hareket modeli geliştirdi.
To Top