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; }
Post a Comment