Quicksort (Recursive Version)
Dec 1, 2021
Add Comment
Quicksort adalah algoritma pengurutan dengan mengurutkan data-data pada sub-array yang dibatasi oleh sebuah elemen yang bisa kita sebut sebagai pivot.
Langkah-langkah pengurutan dengan metode Quick Sort
Menerjemahkan algoritma tersebut ke bahasa C
Fungsi jadi
Program jadi
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 yangingin 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 yangingin 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