-->

Quicksort (Recursive Version)

Quicksort adalah algoritma pengurutan dengan mengurutkan data-data pada sub-array yang dibatasi oleh sebuah elemen yang bisa kita sebut sebagai pivot.

http://en.wikipedia.org/wiki/Quicksort


Langkah-langkah pengurutan dengan metode Quick Sort
// cek jika ukuran array kurang atau sama dengan 0 (BASE CASE!!)

// pilih data pertama dalam sebuah pengurutan sebagai pivot

// simpan indeks data pertama tersebut ke variabel sementara

// lakukan pengurutan data pada sebuah array dari start ke end

// jika data yang diurut lebih kecil dari pivot

// tambahkan 1 ke indeks sementara

// tukar data pada indeks sementara
// dengan data yang ingin diurutkan

// tukar data pertama dengan data pada indeks sementara

// lakukan langkah-langkah diatas secara rekursif

Menerjemahkan algoritma tersebut ke bahasa C
// cek jika ukuran array kurang atau sama dengan 0 (BASE CASE!!)
if (start >= end)
{
return;
}
// pilih data pertama pada ukuran sebuah array sebagai pivot
int pivot = data[start];

// simpan indeks data pertama tersebut ke variabel sementara
int store_index = start;
// lakukan pengurutan data pada sebuah array dari start ke end
for (int i = start; i <= end; i++)
{
// jika data yang diurut lebih kecil dari pivot
if (data[i] < pivot)
{
// tambahkan 1 ke indeks sementara
store_index = store_index + 1;

// tukar data pada indeks sementara tersebut dengan data yang ingin diurutkan
tukar(&data[store_index], &data[i]);
}
}
// tukar data pertama dengan data pada indeks sementara dalam sebuah pengurutan
tukar(&data[store_index], &data[start]);

// lakukan langkah-langkah diatas secara rekursif
quick_sort(data, start, store_index - 1);
quick_sort(data, store_index + 1, end);

Fungsi jadi
void quick_sort(int data[], int start, int end)
{
// cek jika ukuran array kurang atau sama dengan 0 (BASE CASE!!)
if (start >= end)
{
return;
}

// pilih data pertama pada ukuran sebuah array sebagai pivot
int pivot = data[start];

// simpan indeks data pertama tersebut ke variabel sementara
int store_index = start;

// lakukan pengurutan data pada sebuah array dari start ke end
for (int i = start; i <= end; i++)
{
// jika data yang diurut lebih kecil dari pivot
if (data[i] < pivot)
{
// tambahkan 1 ke indeks sementara
store_index = store_index + 1;

// tukar data pada indeks sementara tersebut dengan data yang 
                           ingin diurutkan
tukar(&data[store_index], &data[i]);
}
}

// tukar data pertama dengan data pada indeks sementara dalam sebuah pengurutan
tukar(&data[store_index], &data[start]);

// lakukan langkah-langkah diatas secara rekursif
quick_sort(data, start, store_index - 1);
quick_sort(data, store_index + 1, end);
}

Program jadi
#include <stdio.h>

void tukar(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}

void quick_sort(int data[], int start, int end)
{
// cek jika ukuran array kurang atau sama dengan 0 (BASE CASE!!)
if (start >= end)
{
return;
}

// pilih data pertama pada ukuran sebuah array sebagai pivot
int pivot = data[start];

// simpan indeks data pertama tersebut ke variabel sementara
int store_index = start;

// lakukan pengurutan data pada sebuah array dari start ke end
for (int i = start; i <= end; i++)
{
// jika data yang diurut lebih kecil dari pivot
if (data[i] < pivot)
{
// tambahkan 1 ke indeks sementara
store_index = store_index + 1;

// tukar data pada indeks sementara tersebut dengan data yang 
                           ingin diurutkan
tukar(&data[store_index], &data[i]);
}
}

// tukar data pertama dengan data pada indeks sementara dalam sebuah pengurutan
tukar(&data[store_index], &data[start]);

// lakukan langkah-langkah diatas secara rekursif
quick_sort(data, start, store_index - 1);
quick_sort(data, store_index + 1, end);
}

int main()
{
int num;
printf("Masukkan banyaknya data: ");
scanf("%d", &num);

int data[num];
for (int i = 0; i < num; i++)
{
printf("Data ke-%d: ", i);
scanf("%d", &data[i]);
}

quick_sort(data, 0, num - 1);

for (int i = 0; i < num; i++)
{
printf("%d ", data[i]);
}
return 0;
}

0 Response to "Quicksort (Recursive Version)"

Post a Comment

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel