Rumah >Java >javaTutorial >Algoritma Isih Gabung

Algoritma Isih Gabung

Susan Sarandon
Susan Sarandonasal
2025-01-21 22:04:18909semak imbas

Pemahaman mendalam tentang algoritma isihan gabungan

Merge Sort Algorithm

Idea teras algoritma isihan gabungan ialah kaedah bahagi dan takluk, iaitu, "bahagi dan takluk". Ia membahagikan tatasusunan secara rekursif kepada subarray yang lebih kecil sehingga setiap subarray mengandungi hanya satu elemen (yang kini diisih). Ia kemudian menggabungkan subarray ini ke dalam tatasusunan tersusun yang lebih besar. Perlu diingat bahawa proses pengisihan berlaku semasa fasa gabungan, bukan fasa perpecahan.

Demonstrasi Algoritma

Andaikan kita mempunyai tatasusunan untuk diisih:

Merge Sort Algorithm

Kami membahagikan tatasusunan kepada dua subtatasusunan kiri dan kanan:

Merge Sort Algorithm

Teruskan pemisahan rekursif sehingga setiap subarray hanya mempunyai satu elemen:

Merge Sort Algorithm

Seterusnya, gabungkan dan susun subarray ini: nilai yang lebih kecil di sebelah kiri, nilai yang lebih besar di sebelah kanan.

Merge Sort Algorithm

Akhirnya diisih:

Merge Sort Algorithm

Pelaksanaan kod (Java)

Kod Java asal mempunyai beberapa isu kecekapan yang boleh kami optimumkan. Kod yang dipertingkatkan adalah seperti berikut:

<code class="language-java">import java.util.Arrays;

public static void mergeSort(int[] array) {
    int n = array.length;
    if (n < 2) {
        return;
    }
    int middle = n / 2;
    int[] left = Arrays.copyOfRange(array, 0, middle);
    int[] right = Arrays.copyOfRange(array, middle, n);

    mergeSort(left);
    mergeSort(right);

    int leftIndex = 0;
    int rightIndex = 0;
    int arrayIndex = 0;

    while (leftIndex < left.length || rightIndex < right.length) {
        if (leftIndex < left.length && (rightIndex >= right.length || left[leftIndex] <= right[rightIndex])) {
            array[arrayIndex++] = left[leftIndex++];
        } else {
            array[arrayIndex++] = right[rightIndex++];
        }
    }
}</code>

Kod yang dioptimumkan ini menggunakan kaedah Arrays.copyOfRange() untuk menyalin elemen tatasusunan dengan lebih cekap, dan memudahkan keadaan gelung dan pernyataan pertimbangan dalam proses penggabungan, sekali gus meningkatkan kebolehbacaan dan kecekapan kod.

Semoga penjelasan dan kod yang dipertingkatkan ini dapat membantu anda memahami algoritma isihan gabungan dengan lebih baik!

Atas ialah kandungan terperinci Algoritma Isih Gabung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn