WeWereRock
Kabuk Sıralaması
Karışık durumdaki listede, en sondaki elemanıen başa getirmek zaman kaybıdır. Bu sebeple programcılar kabuk sıralaması(shell sort) algoritmasınıgeliştirmişlerdir. “Böl ve yönet” mantığıile tüm dizinin sıralanmasıyerine, küçük parçalar halinde dizi sıralanır. Küçük listeler sıralandıktan sonra, listeler birleştirilir.
Aslında kabuk sıralaması balon ve ekleme sıralamasını hızlandırmak için geliştirilmiştir. Yani farklıbir sıralama algoritmasıdeğildir.
1. Büyük liste küçük listelere bölünür.
2. Küçük liste balon veya ekleme sıralamasıile sıralanır.
3. Resim deki örnekte 15 ve 29 rakamısıralanmasına gerek yoktur. 16 ve 4 rakamısıralanır, 78 ise işleme girmez.
4. 3. adımda sadece 4 ve 16’nın yeri değişir, tekrar dizi küçük listelere bölünür.
5. Dizide 15, 78 ve 16 sıralanır, 4 ve 29 rakamlarının sıralanmasına gerek yoktur.
6. Liste sıralamasıtamamlanana kadar 2 ve 4. adımlar tekrarlanır
Kabuk sıralamasısahte kodlarıaşağıdaki gibidir
Karışık durumdaki listede, en sondaki elemanıen başa getirmek zaman kaybıdır. Bu sebeple programcılar kabuk sıralaması(shell sort) algoritmasınıgeliştirmişlerdir. “Böl ve yönet” mantığıile tüm dizinin sıralanmasıyerine, küçük parçalar halinde dizi sıralanır. Küçük listeler sıralandıktan sonra, listeler birleştirilir.
Aslında kabuk sıralaması balon ve ekleme sıralamasını hızlandırmak için geliştirilmiştir. Yani farklıbir sıralama algoritmasıdeğildir.
1. Büyük liste küçük listelere bölünür.
2. Küçük liste balon veya ekleme sıralamasıile sıralanır.
3. Resim deki örnekte 15 ve 29 rakamısıralanmasına gerek yoktur. 16 ve 4 rakamısıralanır, 78 ise işleme girmez.
4. 3. adımda sadece 4 ve 16’nın yeri değişir, tekrar dizi küçük listelere bölünür.
5. Dizide 15, 78 ve 16 sıralanır, 4 ve 29 rakamlarının sıralanmasına gerek yoktur.
6. Liste sıralamasıtamamlanana kadar 2 ve 4. adımlar tekrarlanır
Kabuk sıralamasısahte kodlarıaşağıdaki gibidir
PHP:
Başla
Sayısal DiziVeriler(5)
Sayısali, Geçici, Dur, Geç, X, Sınır
Yaz;"Sıralanacak veriler:"
Döngü i = 1, 5, 1
Veriler(i) = Rasgele(100)
Yaz; Veriler(i)
Döngü Bitti
X = tamsayı(5 / 2)
İken (X > 0)
Dur = 0
Sınır = 5 – X
İken (Dur = 0)
Geç = 0
Döngü i = 1, Sınır, 1
Eğer (Veriler(i) > Veriler(i + X)) İse
Geçici = Veriler(i)
Veriler(i) = Veriler(i + X)
Veriler(i + X) = Geçici
Geç = 1
Eğer Bitti
Döngü Bitti
Sınır = Geç – X
Eğer Geç = 0 İse Dur = 1
İken Bitti
X = tamsayı(X / 2)
İken Bitti
Yaz; "Sıralı liste:"
Döngü i = 1, 5, 1
Yaz; Veriler(i)
Döngü Bitti
Bitir