Hızlı sıralama (quicksort) algoritması

Eğitim, Programlama Yorum yaz

Hızlı sıralama (quicksort) algoritması İngiliz bilgisayar bilimcisi Sir Charles Antony Richard Hoare tarafından bilinene göre 1962 tarihinde yazıldı. n adet sayıyı ortalama bir durumda Θ(nlogn) karmaşıklığıyla, karışık bir durumda ise Θ(n2) karmaşıklığıyla sıralar.

bubble_sort_animation
Quicksort algoritmasını diğer sıralama algoritmalarıyla karşılaştırabiliriz. Algoritmanın temel olarak çalışma mantığı şu şekildedir;

  1. Diziden herhangi bir elemanı referans (pivot) olarak seç.
  2. Referans sayının solundaki sayılardan referans sayıya göre büyük olanları referans sayının sağına, sağındaki sayılardan küçük olanları ise soluna gelecek şekilde elemanları konumlandır. Bu şekilde diziyi bölümlendirmiş olduk
  3. Referans sayının solunda ve sağında kalan her iki parça dizi için de işlemi özyineli (recursive)  olarak tekrar et.
  4. Parçalanan dizilerde eleman sayısı sıfır olana kadar işlemi devam ettir.

sorting_quicksort_anim

Eğitim videosunu izlemek için tıkayınız.

Etkileşimli olarak işlemleri aşağıdaki sayfalardan takip edebilirsiniz;

quick

32 programlama dilinde yazılmış hızlı sıralama algoritmaları

Javascript IDE ile incelemek için

C++ için internetten bulup visual studio 2008 ile düzenlediğim kodu ve örnek uygulamayı inceleyebilirsiniz;

#include "stdafx.h"

#include "iostream"
using namespace std;
int q_sort(int a[], int l,int r); //Function tanımlaması

int q_sort(int a[], int l,int r) //function prototipi
{
int i,j;
i=l;// l değişkeni , 'a'dizisinin sol tarafını indisliyor,
j=r;// r değişkeni ise dizinin sağ tarafını indisliyor.
int ref,temp;
ref=a[(l+r)/2];//Referans değeri buluyoruz.
do {
while(a[i]
while(refl) j--;
if(i<=j)
{temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;}
} while (i<=j);
if (l
if (i
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
int n,i,l,r,x;
int a[150];
char ans;
do{
cout<<"Kac adet sayi siralamak istiyorsunuz?";
cin>>n;
cout<
cout<<"Siralamak istediginiz sayilari giriniz:"<
for (i=0;i
{
cin>>x;
a[i]=x;
}
cout<<"Siralanmis liste:"<
r=n-1;
l=0;
q_sort(a,l,r);
for (i=0;i<<
cout<<"Baska bir siralama yapmak ister misiniz?(Y/N)";
cin>>ans;
}while (ans=='y');
return 0;
}
Yazar: Baran
Etiketler: , , , , , , |


1 Cevap to “Hızlı sıralama (quicksort) algoritması”

  1. Ahmet Eyüp Diyor ki:

    Data Structres and Algorithms dersinin ödevini aldığımızda öğrendiğim konulardan biri. Ben de araştırmıştım, şaşırtıcı baya :)

    Beğendim - Beğenmedim: Thumb up 0 Thumb down 0

Yorum Yazın