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. . !ecara rekursif panggil fungsi quicksort terhadap elemen"elemen di sebelah kiri dan sebelah kanan pivot. #. Fungsi terakhir yang tidak $a%ib 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:
Maka list tersebut bisa dipecah menjadi:
atau seperti ini:
Tergantung algoritma yang kita gunakan dalam memecah list. Saya contohkan dengan algoritma yang saya pilih ini. Saya memiliki list berikut 6, , !, ", #, $, %, &:
Saya pilih " sebagai pi'ot (sembarang elemen boleh menjadi pi'ot, saya pilih yang kira)kira di tengah*. Tukarkan pi'ot ini dengan elemen terakhir.
+asilnya seperti ini: 6,, , !, &, #, $, %, " (pi'ot*. Pada elemen pertama saya beri tanda bintang (,*, akan saya jelaskan nanti gunanya.
Sekarang kita akan mulai memproses list dari elemen pertama sampai elemen sebelum pi'ot. Setiap kali menemukan elemen yang kurang dari pi'ot, saya pindahkan (kita tukar* dengan elemen yang diberi tanda bintang. -alu bintang dipindahkan satu elemen ke kanan. .lemen pertama (6* lebih besar dari pi'ot ("*, jadi kita cek elemen berikutnya yaitu . /arena kurang dari pi'ot, kita tukarkan dengan elemen yang bertanda ,. +asilnya:
+asilnya: , ,6, !, &, #, $, %, " (pi'ot*. 0ngat bahwa setelah menukar, tanda , dipindah satu elemen ke kanan.
1erikutnya kita lihat bahwa ! lebih dari pi'ot, jadi kita biarkan. .lemen & kurang dari pi'ot, sehingga perlu ditukar dengan ,.
2an hasilnya adalah: , &, ,!, 6, #, $, %, " (pi'ot*.
.lemen # juga kurang dari pi'ot, jadi kita perlu menukarnya.
+asilnya adalah: , &, #, ,6, !, $, %, " (pi'ot*.
2an yang terakhir yang kurang dari pi'ot adalah $.
+asilnya adalah: , &, #, $, ,!, 6, %, " (pi'ot*.
2an langkah terakhir adalah menukar posisi , dengan pi'ot:
+asil akhirnya adalah list yang terbagi dua (semua elemen di kiri " lebih kecil dari " dan semua elemen di kanan " lebih besar dari "*: , &, #, $, ", 6, %, !:
3tau jika digambarkan, yang saya lakukan adalah seperti ini: memecah list awal, menjadi dua list, yang satu berisi elemen)elemen yang lebih kecil dari ", dan list yang berisi elemen)elemen yang lebih besar atau sama dengan ".
Skrip Program void _quicksort(int *elements, int left, int right) { int pivotposition; /* jika left > right, !erarti list kosong */ if (left " right) { pivotposition partition(elements, left, right); /*urutkan elemen#elemen di kiri pivot*/ _quicksort(elements, left, pivotposition # $); /*urutkan elemen#elemen di kanan pivot*/ _quicksort(elements, pivotposition % $, right); & &
& 'ome (