Kabuk sıralaması
Vikipedi, özgür ansiklopedi
Shell sıralaması (İngilizcesi: 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.
Konu başlıkları |
Algoritmanın Geçmişi [değiştir]
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 [değiştir]
C/C++ dilinde yazılmış Shell sıralaması [değiştir]
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ı [değiştir]
public static void shellSort(int[] a) { for (int increment = a.length / 2; increment > 0; increment = (increment == 2 ? 1 : (int) Math.round(increment / 2.2))) { for (int i = increment; i < a.length; i++) { int temp = a[i]; for (int j = i; j >= increment && a[j - increment] > temp; j -= increment){ a[j] = a[j - increment]; a[j - increment] = temp; } } } }
Python dilinde yazılmış Shell sıralaması [değiştir]
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 [değiştir]
- Detailed analysis of Shell sort
- Analysis of Shellsort and Related Algorithms, Robert Sedgewick
- Shell Sort Java Applet
- Best known gap sequence
- A graphical demonstration and discussion of shell sort
