18 Aralık 2018 Salı

Sıralama Algoritmaları /Selection Sort


Bilgisayar ortamında verilerin sıralı olması birçok işi kolaylaştırır. Arama , ekleme ,bölme vs. durumlarında verilerin sıralı olması ile olmaması arasında çok büyük performans farkı olabilir.
Birçok algoritma (örneğin binary search) sıralı veriler üzerinde çallışır.
Kullanıcı için de verilerin sıralı olması büyük kolaylık sağlar.
Verilerin sıralanması için birçok algoritma geliştirilmiştir.
 
Selection Sort , Bubble sort , İnsertion sort ,shell sort , Merge sort , Heap sort , Quick sort, Bucket sort , Radix sort, Distribution sort, Shuffle sort , Örnek sıralma algoritmalarıdır.
Sıralanacak verinin boyutu,yazılacak kod maliyeti , sistem kaynakları,
kullanıcı tercihi vb.durumlara göre herhangi biri tercih edilebilir.



Selection Sort

Sayı dizisini kullanacak olursak, algoritma ilk adımda tüm diziyi dolaşacak , en küçük elamanı bulup ilk sıraya yazacak. Sonra dizinin kalan kısmında aynı işi yeniden yapacak.Kalan kısmı tarayıp en küçük elemanı bulup,ikinci sıraya yazacak.Bu şekilde son elemana kadar gidip en küçükten büyüğe doğru dizimiz sıralanmış olacak.
 
__________________
__________________
Algoritma Mantığı

12,11,28,3,5,47

Dongünün 1.Adımı
i=0 k=i=0 s=a[0]=12

j=1 a[j]>s ? a[1]>12 False
j=2 a[j]>s ? a[2]>12 True

    s=a[2]=28 k=2

j=3 a[j]>s ? a[3]>28 False
j=4 a[j]>s ? a[4]>28 False
j=5 a[j]>s ? a[5]>28 True

    s=a[5]=47 k=5

s=a[k]=47
a[k]=a[i]=12
a[i]=s=47

47,11,28,3,5,12

i=1 k=i=1 s=[1]=11


j=2 a[j]>s ? a[2]>11  True


j=2 a[j]>s ? a[2]>11 True
s=a[2]=28
j=3 a[j]>s ? a[3]>28 False
j=4 a[j]>s ? a[4]>28 False
j=5 a[j]>s ? a[5]>28 False

    s=a[k]=28 a[k]=a[i]=11
a[i]=s=28

47,28,11,3,5,12
i=2
47,28,11,3,5,11
i=3
47,28,12,11,5,3
i=4
47,28,12,11,5,3
_________________
_________________
Selection Sort
#include <stdio.h>

int main(){
int i,j,k,l,n=6,s;
int a[6]={11,12,28,3,5,47};
for(i=0;i<n-1;i++){
k=i; s=a[i];
for(j=i+1;j<n;j++)
   if(a[j]>s)
     { s=a[j]; k=j; }
     s=a[k];
     a[k]=a[i];
     a[i]=s;
}
     for(i=0;i<n;i++)
   
     printf("Dizinin %d elemani %d dir\n",i+1,a[i]) ;


   
}


________________
________________
Aşamalarını görerek Selection sort

#include <stdio.h>

int main(){
int i,j,k,l,n=6,s;
int a[6]={11,12,28,3,5,47};
for(i=0;i<n-1;i++){
k=i; s=a[i];
for(j=i+1;j<n;j++)

   if(a[j]>s)
     { s=a[j]; k=j; }
     s=a[k];
     a[k]=a[i];
     a[i]=s;
   
      printf("Algoritmanin %d. adiminda dizi elemanlar asagidaki gibidir.\n",i+1) ;
      for(l=0;l<n;l++)
   
     printf("Dizinin %d. adımında elemani %d dir\n",l,a[l]) ;
}


}
__________________

__________________


0 yorum:

Yorum Gönder