Yalnız Mesajı Göster

Sıralama Algoritmaları

Eski 10-29-2012   #5
Prof. Dr. Sinsi
Varsayılan

Sıralama Algoritmaları





Kabuk 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

Algoritmanın Geçmişi

Kabuk sıralaması algoritmasının adı algoritmayı bulan kişi olan Donald Shell'den gelmektedir Soyadı İngilizce'de Kabuk anlamına gelen Donald Shell algoritmayı 1959 yılında yayınlamıştır

Uygulamalar

C/C++ dilinde yazılmış kabuk sıralaması

Aşağıda C/C++ dilinde yazılmış, bir sayı dizisini kabuk sıralaması algoritmasını kullanarak sıralayan bir program verilmiştir

/*

SHELL SORT

Written by erengencturknet

*/

#include <stdioh>

#define ELEMENTS 6

void shellsort(int A[],int max)

{

int stop,swap,limit,temp,k;

int x=(int)(max/2)-1;

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:
");

for(i=0;i<ELEMENTS;i++)

printf("%d ",X[i]);

shellsort(X,ELEMENTS);

printf("
SORTED ARRAY
");

for(i=0;i<ELEMENTS;i++)

printf("%d ",X[i]);

}



Java dilinde yazılmış kabuk sıralaması

public static void shellSort(int[] a) {

for (int increment = alength / 2; increment > 0;

increment = (increment == 2 ? 1 : (int) Mathround(increment / 22))) {

for (int i = increment; i < alength; 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ış kabuk 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


Alıntı Yaparak Cevapla