Sıralama Algoritmaları

Kodla Büyü

gökalp

Seçkin Üye
Seçkin Üye
Mesajlar
506
Sağolsun arkadaşların ödevleri olmasa C'yi iyice unutucaz... Bu yazıda Insertion Sort ve Quick ( Hızlı) Sort algoritmalarına değineceğiz.

Bu algoritma ile elimizde bulunan integer türünden bir dizinin elemanlarını sıralayacağız. Bu algoritmayı iskambil kâğıtlarını sıralama mantığıyla benzetebiliriz. Sırayla dizinin tüm elemanlarını birbirleriyle karşılaştırarak sıralama yapıyoruz. Performans bakımından diğer algoritmalardan kötü olsa da bilmemizde fayda var.
Bu algoritmayı kullanmak için void türünden bir metot hazırlandı ve sıralanacak integer türünden dizi bu metoda parametre olarak veriyoruz.
Metot çalıştığında diziyi sıralanmış olarak elde ediyoruz. Insertion Sort algoritmasının C kodları ve kullanımı şu şekilde olacak:

Kod:
#include <stdio.h> 
#define A_SIZE 10 

void bubble_sort(int *p, int size); 
void print_array(int *p, int size); 

int main(void) 
{  int sayac;
   int a[A_SIZE] = {4, 1, 7, 3, 6, -6, 8, 2, -56, 5}; 

   print_array(a, A_SIZE); 
   bubble_sort(a, A_SIZE); 
   print_array(a, A_SIZE); 
   return 0; 
} 
/**************************************/ 
void bubble_sort(int *p, int size) /* Buble (Kabarcık)Sıralama algoritması*/
{ 
   int   i, j, temp, min; 

   for (i = 0; i < size - 1; i++) 
      for (j = 0; j < size - i - 1; j++) 
         if (p[j] > p[j + 1]) { 
            temp = p[j]; 
            p[j] = p[j + 1]; 
            p[j + 1] = temp; 
     sayac++;
         } 
} 
/**************************************/ 
void print_array(int *p, int size) 
{ 
   int i; 

   for (i = 0; i < size; i++) 
      printf("%d ", p[i]); 
      printf("%d ", sayac); /*Algoritmanın gercekleştiriliceği işlem sayısı*/
   putchar('\n'); 
}
 
Quick ( Hızlı) Sort

Verinin hafızada sıralı tutulması için geliştirilen sıralama algoritmalarından (sorting algorithms) bir tanesidir. Basitçe sıralanacak olan dizideki orta noktada (mean) bulunan bir sayıyı seçerek diğer bütün sayıları bu orta sayıdan büyük veya küçük diye sınıflayarak sıralama yapmayı hedeflemektedir. Bu açıdan bir parçala fethet (divide and conquere) yaklaşımıdır. Ayrıca bu seçilen orta noktaya eksen (pivot) adı da verilir çünkü bütün diğer sayılar bu sayının ekseninde sıralanacaktır.

Daha detaylı bilgi için tıklayınız...

Kod:
#include<stdio.h>
void quicksort(int [10],int,int);
int main(){
  int x[20],size,i;
  printf("Sıralanacak dizi boyutunu giriniz: ");
  scanf("%d",&size);
  printf("%d Sayı giriniz: ",size);
  for(i=0;i<size;i++)
  scanf("%d",&x[i]);

 quicksort(x,0,size-1);

  printf("Siralanmis liste: ");
  for(i=0;i<size;i++)
    printf(" %d",x[i]);

  return 0;
}

void quicksort(int x[10],int first,int last){
    int pivot,j,temp,i;

     if(first<last){
         pivot=first;
         i=first;
         j=last;

         while(i<j){
             while(x[i]<=x[pivot]&&i<last)
                 i++;
             while(x[j]>x[pivot])
                 j--;
             if(i<j){
                 temp=x[i];
                  x[i]=x[j];
                  x[j]=temp;
             }
         }

         temp=x[pivot];
         x[pivot]=x[j];
         x[j]=temp;
         quicksort(x,first,j-1);
         quicksort(x,j+1,last);

    }
}

Ekran Çıktısı:
Sıralanacak dizi boyutunu giriniz: 8
8 sayı giriniz: 8 7 6 5 7 3 2 1
Siralanmis liste: 1 2 3 4 5 6 7 8
 
Sayıların random işlevi ile alınarak Kabarcık sıralama uygulaması:

Kod:
#include <stdio.h>
#include <stdlib.h> /* random() fonksiyonun kullanılması için gerekli kütüphane */
#define A_SIZE 5 

void bubble_sort(int *p, int size);   /*Kabarcık sıralama algortiması için kullanılan fonksiyon*/
void print_array(int *p, int size); 
int gen_rand(void);   		   /*Rasgele sayı oluşturmak için kullanılan fonksiyon*/

int num1, num2, num3,num4, num5;
int gen_rand(void)
/* 0 ile 999 arasında sayı dönder*/
{
   int n;
   n=random(1000);  /* n 0 ile 999 arasında rasgele bir sayı */
   return(n);
}
	 num1=gen_rand();
  	 num2=gen_rand();
  	 num3=gen_rand();
	 num4=gen_rand();
	 num5=gen_rand();
int main(void) 
{  int sayac;
   int a[A_SIZE] = { num1, num2, num3, num4, num5 }; 

   print_array(a, A_SIZE); 
   bubble_sort(a, A_SIZE); 
   print_array(a, A_SIZE); 
   return 0; 
} 
/**************************************/ 
void bubble_sort(int *p, int size) /* Buble (Kabarcık)Sıralama algoritması*/
{ 
   int   i, j, temp, min; 

   for (i = 0; i < size - 1; i++) 
      for (j = 0; j < size - i - 1; j++) 
         if (p[j] > p[j + 1]) { 
            temp = p[j]; 
            p[j] = p[j + 1]; 
            p[j + 1] = temp; 
     sayac++;
         } 
} 
/**************************************/ 
void print_array(int *p, int size) 
{ 
   int i; 

   for (i = 0; i < size; i++) 
      printf("%d ", p[i]); 
      printf("%d ", sayac); /*Algoritmanın gercekleştiriliceği işlem  sayısı*/
   putchar('\n'); 
}
 
BBNET
Geri
Üst