2 .     Quick Sort ( hızlı sıralama )   sıralamanın  algoritma, akış  şeması  ve  “ C “ dilindeki   kodunu  yazalım 

 

 

 

ALGORİTMA

 

1.   Başla

2.   Oku dizi , A

3. Dizinin başlangıç ve bitiş değerlerini sayaç değişkenlerine, dizinin ortanca elemanının     değerini orta değişkenine ata,

4.  ( A[K] < Orta ) ve ( K<Sağ )  iken K değişkenini bir artır, ( Dizinin ortanca elemanından küçük ve dizinin ortanca elemanından daha solda olan elemanı sağa kaydır )

5. ( Orta < A[J] )  ve ( J>Sol ) iken J  değişkenini bir azalt,( Dizinin ortanca elemanından büyük ve dizinin ortanca elemanından daha sağda olan elemanı sola kaydır)

6.  K ’nın  değeri  J ‘ye eşit ya da küçükse A[K] ile A[J] yer değiştir.

7.  ( Sol < J )   ise sıralamayı tekrarla

8.  ( K < Sağ ) ise sıralamayı tekrarla        

      9.  Sıralanmış diziyi yaz

     10.  Bitiş           

                                      

 

 

AKIŞ  ŞEMASI

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                      

                                                                                                                                                        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                                                                                                          

 

 

 

 

 

 

 

 

 

Oval:   Son
 

 

 

 

 


“ C “  DİLİNDE  YAZILMIŞ  PROGRAM  KODU

 

 

#include <stdio.h>                                              

#include<conio.h>                                              

                                                                            

void hizli_sirala(int a[], int sol, int sag);             

                                                                             

void main()                                                           

   {                                                                          

     clrscr();                                                               

     int i,j,sayi;                                                           

     int a[1000];                                                            

     i=0;                                                                     

     printf("Kaç elemanlı dizi sıralanacak : ");scanf("%d",&sayi);           

     printf("Dizi elemanları giriliyor\n");              

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

        {                                                                     

           scanf("\t %d",&a[i]);                                 

        }                                                                    

     clrscr();                                                               

     printf("Girdiğiniz dizi:\n");                                           

     for (j=0;j<i;j++) printf("%d \n",a[j]);                                 

     hizli_sirala(a,0,i-1);                                                   ­

     printf("Sıralanmış dizi ( küçükten büyüğe ) :\n");                      

     for (j=0;j<i;j++) printf("%d \n",a[j]);             

     getch();                                                            

   }                                                                         

                                                                             

void hizli_sirala(int a[],int sol, int sag)                

{  register int k,j;                                                  

   int orta,siradan;                                                  

                                                                             

     k=sol;                                                               

     j=sag;                                                                

     orta=a[(sol+sag)/2];                                         

     do {                                                                  

          while (a[k]<orta && k<sag) k++;              

          while (orta<a[j] && j>sol) j--;                   

          if (k<=j) {                                                   

             siradan=a[k];                                           

             a[k]=a[j];                                                     ­

             a[j]=siradan;                                            

             k++;  j--;                                                  

           }                                                                  

        } while (k<=j);                                               

        if (sol < j) hizli_sirala(a,sol,j);                        

        if (k < sag) hizli_sirala(a,k,sag);                     

}                                                                            

     

 

     

10 adet dizi elemanını sıralamasını istersek program çıktısı aşağıdaki gibi olur :

 

Girdiğiniz dizi:

  0

-8

 1

 6

-2

-9

 5

15

 0

-18

Sıralanmış dizi ( küçükten büyüğe ) :

-18

-9

-8

-2

 0

 0

 1

 5

 6

15