fh

fh
vh

Penjelasan Quick Sort

Penjelasan Quick Sort


Fungsi kedua adalah fungsi quicksort itu sendiri adalah :
1.       Pilih sebuah elemen pivot.
2.       Panggil fungsi partisi, yang akan memindahkan semua elemen yang kurang dari pivot ke kiri, dan yang lebih dari pivot ke kanan. Kita akan mendapatkan lokasi pivot yang baru.
3.       Secara rekursif panggil fungsi quicksort terhadap elemen-elemen di sebelah kiri dan sebelah kanan pivot.
4.      Fungsi terakhir yang tidak wajib adalah yang memanggil basis rekursi.


Penjelasan Contoh Quick Sort
Saya akan menjelaskan algoritmanya menggunakan gambar. Pertama perhatikan bahwa kita bisa memecah list menjadi dua bagian, tidak peduli urutan di bagian kiri dan kanan. Jadi jika kita memiliki list:
quicksort.dot.png
Maka list tersebut bisa dipecah menjadi:
quicksort.dot.2.png
atau seperti ini:
quicksort.dot.3.png
Tergantung algoritma yang kita gunakan dalam memecah list. Saya contohkan dengan algoritma yang saya pilih ini. Saya memiliki list berikut 6, 4, 8, 5, 3, 1, 7, 2:
quicksort.dot.4.png
Saya pilih 5 sebagai pivot (sembarang elemen boleh menjadi pivot, saya pilih yang kira-kira di tengah). Tukarkan pivot ini dengan elemen terakhir.
quicksort.dot.5.png
Hasilnya seperti ini: 6*, 4, 8, 2, 3, 1, 7, 5 (pivot). Pada elemen pertama saya beri tanda bintang (*), akan saya jelaskan nanti gunanya.
quicksort.dot.6.png
Sekarang kita akan mulai memproses list dari elemen pertama sampai elemen sebelum pivot. Setiap kali menemukan elemen yang kurang dari pivot, saya pindahkan (kita tukar) dengan elemen yang diberi tanda bintang. Lalu bintang dipindahkan satu elemen ke kanan. Elemen pertama (6) lebih besar dari pivot (5), jadi kita cek elemen berikutnya yaitu 4. Karena 4 kurang dari pivot, kita tukarkan 4 dengan elemen yang bertanda *. Hasilnya:
quicksort.dot.7.png
Hasilnya: 4, *6, 8, 2, 3, 1, 7, 5 (pivot). Ingat bahwa setelah menukar, tanda * dipindah satu elemen ke kanan.
quicksort.dot.8.png
Berikutnya kita lihat bahwa 8 lebih dari pivot, jadi kita biarkan. Elemen 2 kurang dari pivot, sehingga perlu ditukar dengan *.
quicksort.dot.9.png
Dan hasilnya adalah: 4, 2, *8, 6, 3, 1, 7, 5 (pivot).
quicksort.dot.10.png
Elemen 3 juga kurang dari pivot, jadi kita perlu menukarnya.
quicksort.dot.11.png
Hasilnya adalah: 4, 2, 3, *6, 8, 1, 7, 5 (pivot).
quicksort.dot.12.png
Dan yang terakhir yang kurang dari pivot adalah 1.
quicksort.dot.13.png
Hasilnya adalah: 4, 2, 3, 1, *8, 6, 7, 5 (pivot).
quicksort.dot.14.png
Dan langkah terakhir adalah menukar posisi * dengan pivot:
quicksort.dot.15.png
Hasil akhirnya adalah list yang terbagi dua (semua elemen di kiri 5 lebih kecil dari 5 dan semua elemen di kanan 5 lebih besar dari 5): 4, 2, 3, 1, 5, 6, 7, 8:
quicksort.dot.16.png
Atau jika digambarkan, yang saya lakukan adalah seperti ini: memecah list awal, menjadi dua list, yang satu berisi elemen-elemen yang lebih kecil dari 5, dan list yang berisi elemen-elemen yang lebih besar atau sama dengan 5.
quicksort.dot.17.png

Skrip Program

void _quicksort(int *elements, int left, int right)
    {  
        int pivotposition;
        /* jika left >= right, berarti list kosong */
        if (left < right) {
            pivotposition = partition(elements, left, right);
            /*urutkan elemen-elemen di kiri pivot*/
            _quicksort(elements, left, pivotposition - 1);
            /*urutkan elemen-elemen di kanan pivot*/
            _quicksort(elements, pivotposition + 1, right);
        }
    }



0 Response to "Penjelasan Quick Sort"

Posting Komentar