Shell sıralaması (İngilizce: Shell sort), bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Eklemeli sıralama algoritmasının aşağıdaki iki gözlem kullanılarak genelleştirilmiş biçimidir:
- Eklemeli sıralama, sıralanacak dizi zaten büyük oranda sıralıysa daha verimli çalışır.
- Eklemeli sıralama, dizideki öğeleri her adımda yalnızca bir sonraki konuma aktardığından verimsizdir.
Kabuk sıralaması | |
---|---|
Kabuk sıralama algoritması | |
Sınıf | Sıralama algoritması |
Veri yapısı | Dizi |
Zaman karmaşıklığı | O(n log² n), aralıkların dizilimine göre değişir |
En iyi | Genellikle değil |
Alan karmaşıklığı | O(n) toplam, O(1) yardımcı |
Algoritmanın Geçmişi
Shell sıralaması algoritmasının adı algoritmayı bulan kişi olan Donald Shell'den gelmektedir. Donald Shell algoritmayı 1959 yılında yayınlamıştır.
Uygulamalar
C/ dilinde yazılmış Shell sıralaması
Aşağıda C/C++ dilinde yazılmış, bir sayı dizisini Shell sıralaması algoritmasını kullanarak sıralayan bir program verilmiştir.
/* SHELL SORT Written by erengencturk.net */ #include <stdio.h> #define ELEMENTS 6 void shellsort(int A[],int max) { int stop,swap,limit,temp,k; int x=(int)(max/2); while(x>0) { stop=0; limit=max-x; while(stop==0) { swap=0; for(k=0;k<limit;k++) { if(A[k]>A[k+x]) { temp=A[k]; A[k]=A[k+x]; A[k+x]=temp; swap=k; } } limit=swap-x; if(swap==0) stop=1; } x=(int)(x/2); } } int main() { int i; int X[ELEMENTS]={5,2,4,6,1,3}; printf("Unsorted Array:\n"); for(i=0;i<ELEMENTS;i++) printf("%d ",X[i]); shellsort(X,ELEMENTS); printf("\nSORTED ARRAY\n"); for(i=0;i<ELEMENTS;i++) printf("%d ",X[i]); }
Java dilinde yazılmış Shell sıralaması
public static void shellSort(int[] a) { for (int i = a.length / 2; i > 0; i = (i == 2 ? 1 : (int) Math.round(i / 2.2))) { for (int i2 = i; i2 < a.length; i2++) { int temp = a[i]; for (int j = i2; j >= i && a[j - i] > temp; j -= i){ a[j] = a[j - i]; a[j - i] = temp; } } } }
Python dilinde yazılmış Shell sıralaması
def shellsort(a): def increment_generator(a): h = len(a) while h != 1: if h == 2: h = 1 else: h = 5*h//11 yield h for increment in increment_generator(a): for i in xrange(increment, len(a)): for j in xrange(i, increment-1, -increment): if a[j - increment] < a[j]: break a[j], a[j - increment] = a[j - increment], a[j] return a
Dış bağlantılar
- . 16 Ocak 2000 tarihinde kaynağından arşivlendi.
- Robert Sedgewick. . 7 Haziran 1997 tarihinde kaynağından arşivlendi.
- . 14 Mayıs 2007 tarihinde kaynağından arşivlendi.
- . 20 Şubat 2007 tarihinde kaynağından arşivlendi.
- . 3 Nisan 2008 tarihinde kaynağından arşivlendi.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Shell siralamasi Ingilizce Shell sort bilgisayar bilimlerinde kullanilan bir siralama algoritmasidir Eklemeli siralama algoritmasinin asagidaki iki gozlem kullanilarak genellestirilmis bicimidir Eklemeli siralama siralanacak dizi zaten buyuk oranda siraliysa daha verimli calisir Eklemeli siralama dizideki ogeleri her adimda yalnizca bir sonraki konuma aktardigindan verimsizdir Kabuk siralamasiKabuk siralama algoritmasiSinifSiralama algoritmasiVeri yapisiDiziZaman karmasikligiO n log n araliklarin dizilimine gore degisirEn iyiGenellikle degilAlan karmasikligiO n toplam O 1 yardimciKabuk siralamasi algoritma renk cubuklariAlgoritmanin GecmisiShell siralamasi algoritmasinin adi algoritmayi bulan kisi olan Donald Shell den gelmektedir Donald Shell algoritmayi 1959 yilinda yayinlamistir UygulamalarC C dilinde yazilmis Shell siralamasi Asagida C C dilinde yazilmis bir sayi dizisini Shell siralamasi algoritmasini kullanarak siralayan bir program verilmistir SHELL SORT Written by erengencturk net include lt stdio h gt define ELEMENTS 6 void shellsort int A int max int stop swap limit temp k int x int max 2 while x gt 0 stop 0 limit max x while stop 0 swap 0 for k 0 k lt limit k if A k gt A k x temp A k A k A k x A k x temp swap k limit swap x if swap 0 stop 1 x int x 2 int main int i int X ELEMENTS 5 2 4 6 1 3 printf Unsorted Array n for i 0 i lt ELEMENTS i printf d X i shellsort X ELEMENTS printf n SORTED ARRAY n for i 0 i lt ELEMENTS i printf d X i Java dilinde yazilmis Shell siralamasi public static void shellSort int a for int i a length 2 i gt 0 i i 2 1 int Math round i 2 2 for int i2 i i2 lt a length i2 int temp a i for int j i2 j gt i amp amp a j i gt temp j i a j a j i a j i temp Python dilinde yazilmis Shell siralamasi def shellsort a def increment generator a h len a while h 1 if h 2 h 1 else h 5 h 11 yield h for increment in increment generator a for i in xrange increment len a for j in xrange i increment 1 increment if a j increment lt a j break a j a j increment a j increment a j return aDis baglantilar 16 Ocak 2000 tarihinde kaynagindan arsivlendi Robert Sedgewick 7 Haziran 1997 tarihinde kaynagindan arsivlendi 14 Mayis 2007 tarihinde kaynagindan arsivlendi 20 Subat 2007 tarihinde kaynagindan arsivlendi 3 Nisan 2008 tarihinde kaynagindan arsivlendi