tolpp.com
yazılım ve programlama günlüğü

Quick Sort (Hızlı Sıralama) Oct 4, 2012

Quick sort (hızlı sıralama) sıralama algoritması, parçala ve çözümle (divide and conquer) mantığıyla çalışan, best-case O(nlogn), worst-case O(n^2) zaman karmaşıklığı ile en çok kullanılan sıralama algoritmalarındandır.

Algoritmayı şu üç adımla inceleyebiliriz.

  1. Liste içerisinden pivot olacak bir eleman seçilir.
  2. Pivot değerden küçük olanlar pivottan önce, büyük olanlar pivottan sonra olacak şekilde elemanlar liste içerisinde yer değiştirilir.
  3. Pivotun öncesindeki ve sonrasındaki değerler ayrı bir liste kabul edilip quick sort algoritması bu listeler için yeniden çalıştırılır.

Pseudocode :

Quicksort(A[l..r])
//Alt dizilerin quicksort ile sıralanması
//Input: Dizinin alt dizisi A[0..n − 1]eved
// indices l and r
//Output: Alt dizi A[l..r] artan şekilde sıralı
if l < r
s ← Partition(A[l..r]) //s : bölme pozisyonu
Quicksort(A[l..s − 1])
Quicksort(A[s + 1..r])
Java :
public class QuickSort {
public int[] sort(int[] numbers){
quickSort(numbers,0,numbers.length - 1);
return numbers;
}
private void quickSort(int numbers[], int left, int right) {
int index = partition(numbers, left, right);
if (left < index - 1)
quickSort(numbers, left, index - 1);
if (index < right)
quickSort(numbers, index, right);
}
// Pivot degerin solunda pivottan kucuk,
// pivot degerin saginda pivottan buyuk
// degerlerin olmasini saglar.
// Geriye pivot'un dizi icerisindeki konumunu dondurur
private int partition(int numbers[], int left, int right)
{
int i = left, j = right;
// Pivot deger listenin ortasindan alinir
int pivot = numbers[(left + right) / 2];
// Listenin iki degere bolunmesi
while (i <= j) {
// Pivottan kucuk degerler uzerinde olundugu surece donulur
while (numbers[i] < pivot)
i++;
// Pivottan buyuk degerler uzerinde olundugu surece donulur
while (numbers[j] > pivot)
j--;
// Pivot'un sagindaki kucuk deger ile solundaki buyuk deger yer degistirilir.
if (i <= j) {
int tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
i++;
j--;
}
}
return i;
}
}
view raw QuickSort.java hosted with ❤ by GitHub