Ringkasan
Penyortiran cepat adalah algoritma penyortiran yang dikembangkan oleh Tony Hall. Dalam situasi rata -rata, urutan item N membutuhkan perbandingan (nlogn). Faktanya, penyortiran cepat biasanya secara signifikan lebih cepat daripada algoritma Other (nlogn) lainnya, karena loop dalamnya dapat diimplementasikan secara efisien pada sebagian besar arsitektur, dan dalam sebagian besar data dunia nyata, ia dapat menentukan pilihan desain dan mengurangi kemungkinan istilah kuadratik yang membutuhkan waktu.
Penyortiran cepat, bagi catatan yang akan diurutkan menjadi dua bagian independen melalui satu pesanan, di mana kata kunci dari beberapa catatan lebih kecil dari kata kunci dari bagian lain, dan kemudian kedua catatan tersebut terus diurutkan secara terpisah untuk mencapai tujuan memesan seluruh urutan.
Ilustrasi gambar:
melangkah
Saat memilih elemen benchmark, elemen pertama atau elemen terakhir biasanya dipilih untuk membagi catatan yang akan diurutkan menjadi dua bagian independen melalui satu bagian, di mana nilai elemen dari beberapa catatan lebih kecil dari nilai elemen benchmark. Elemen -elemen yang dicatat di bagian lain lebih besar dari nilai referensi.
Contoh
Data mentah:
3 5 2 6 2
Pilih 3 sebagai tolok ukur
Babak pertama
Dari kanan ke kiri untuk menemukan sesuatu yang lebih kecil dari 3, 2 pertandingan, dan menyesuaikan 2 dan 3 2 5 2 6 3 sekali, dan arah pencarian terbalik, dari kiri ke kanan untuk menemukan sesuatu yang lebih besar dari 3, 5 pertandingan, dan menyesuaikan 2 3 2 6 5 kemudian dari kanan ke kiri untuk menemukan sesuatu yang lebih kecil dari 3, 2 pertandingan, dan menyesuaikan 2 2 3 6 5 putaran satu putaran
Babak 2
Metode yang sama seperti di atas dilakukan untuk [2 2], dan 2 2 3 6 5
Babak ketiga
Metode yang sama seperti di atas dilakukan untuk [6 5], dan 2 2 3 5 6
Hasil akhir
2 2 3 5 6
Implementasi Kode (Java)
Paket com.coder4j.main.arithmetic.sorting; kelas publik {private static int mark = 0; temp; "Get"); ("Throwth In Progress" + Mark + "Pemisahan Roda, Area:" + Low + "-" + High); tinggi) while (high && array [tinggi]> = base) {high--; + BASE + "Ganti Pointer:" + Low + "-" + Tinggi); } / ** * Penyortiran cepat dari array, hubungi rekursif * * @param array * @param rendah * @param tinggi * @Return * / private static int [] quicksort (int [] array, int low, tinggi) {if low (low division) (array); Ay; *Public int static [] (int [] array) {return quicksort (array, 0, array.length - 1); ");}}}Hasil output tes:
Pilih semua dan masukkan dalam catatan. Babak pertama pemisahan sedang dilakukan. Pemisahan adalah 2 dan 3. Babak pemisahan kedua adalah 2 dan 3. Putaran kedua pemisahan adalah 2 dan 3. Putaran kedua pemisahan adalah 2 dan 3. Putaran kedua pemisahan 2 dan 3 dan 3 yang kedua adalah 2 dan pemisahan adalah 2 dan 3 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 dan 3 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 dan 3 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 adalah 2 dan 3 5. Babak terakhir pemisahan adalah 2 adalah 2 dan 3 adalah 5. Putaran terakhir pemisahan adalah 2 adalah 2 dan 3 adalah 5. Hasil terakhir adalah 2 adalah 2 dan 3 adalah 5. 6. Hasil terakhir adalah 2 2 3 5. 6.
Setelah pengujian, konsisten dengan hasil dalam contoh.