Rumah >Java >javaTutorial >Memahami Algoritma QuickSort: Bahagi dan Takluk
Dalam dunia sains komputer, QuickSort menonjol sebagai salah satu algoritma pengisihan yang paling cekap dan digunakan secara meluas. Kepantasannya yang luar biasa dalam menyusun set data yang besar adalah disebabkan oleh strategi "Bahagi dan Takluk"nya. Mari temui cara QuickSort berfungsi!
QuickSort ialah algoritma pengisihan yang menggunakan teknik "Divide and Conquer". Ia memilih elemen, dipanggil pangsi, dan membahagikan senarai kepada dua subarray: satu mengandungi elemen yang lebih kecil daripada pangsi dan satu lagi dengan elemen yang lebih besar. Proses ini berulang secara rekursif ke atas subarray ini sehingga senarai diisih sepenuhnya.
Pilihan pangsi mungkin berbeza-beza. Pendekatan mudah ialah memilih elemen pertama dalam senarai. Walau bagaimanapun, strategi lain mungkin lebih berkesan bergantung pada senario.
Apabila senarai mempunyai 0 atau 1 elemen, ia sudah diisih dan algoritma selesai.
<code class="language-java">// Verifica se a lista tem 0 ou 1 elemento (já ordenada) if (integerList.isEmpty() || integerList.size() == 1) { return integerList; }</code>
Langkah seterusnya melibatkan memilih pangsi dan membahagikan senarai itu kepada dua subarray: satu dengan elemen yang lebih kecil dan satu lagi dengan elemen yang lebih besar daripada pangsi. Lihat contoh cara ini boleh dilakukan:
<code class="language-java">int pivo = integerList.get(0); // Escolhendo o primeiro elemento como pivô List<Integer> menores = new ArrayList<>(); List<Integer> maiores = new ArrayList<>(); for (int i = 1; i < integerList.size(); i++) { if (integerList.get(i) < pivo) { menores.add(integerList.get(i)); } else { maiores.add(integerList.get(i)); } }</code>
Nota: Ambil perhatian bahawa perbandingan bermula pada i=1, menghalang pangsi daripada dimasukkan dalam subbaris kanak-kanak bawah umur.
Rekursi mula dimainkan! Algoritma itu menamakan dirinya sebagai subarray terkecil dan terbesar, mengulangi proses sehingga pengisihan lengkap. Gabungan keputusan ditunjukkan di bawah:
<code class="language-java">List<Integer> sorted = new ArrayList<>(quickSort(menores)); sorted.add(pivo); sorted.addAll(quickSort(maiores)); return sorted;</code>
QuickSort mempunyai kerumitan masa asimptotik O(n log n), menunjukkan kecekapan tinggi, terutamanya berbanding dengan algoritma seperti Bubble Sort, yang mempunyai kerumitan O(n²).
Nota: Penjelasan ini adalah adaptasi berdasarkan Bab 4 buku "Memahami Algoritma" oleh Aditya Bhargava. Perlu diingatkan bahawa mungkin terdapat nuansa yang tidak dibincangkan di sini, dan disyorkan agar anda merujuk sumber tambahan untuk kajian yang lebih mendalam.
QuickSort ialah algoritma teguh yang menggunakan rekursi untuk mengisih senarai dengan cekap. Atribut utamanya ialah kelajuan pelaksanaan, terutamanya pada senarai panjang, berbanding dengan algoritma pengisihan lain. Untuk pemahaman yang lebih lengkap, membaca buku "Memahami Algoritma" adalah dicadangkan.
Pernahkah anda menggunakan QuickSort dalam mana-mana projek? Kongsi pengalaman anda dalam ulasan!
Atas ialah kandungan terperinci Memahami Algoritma QuickSort: Bahagi dan Takluk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!