📜  适用于QuickSort的Java程序(1)

📅  最后修改于: 2023-12-03 14:57:59.325000             🧑  作者: Mango

适用于QuickSort的Java程序

本文将为程序员介绍适用于QuickSort的Java程序,详细阐述程序的实现过程和使用方法。

程序实现

我们先来看一下QuickSort算法的实现过程:

public void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pivot = partition(arr, low, high);
        quickSort(arr, low, pivot - 1);
        quickSort(arr, pivot + 1, high);
    }
}

public int partition(int[] arr, int low, int high) {
    int pivot = arr[low];
    while (low < high) {
        while (low < high && arr[high] >= pivot) {
            high--;
        }
        arr[low] = arr[high];
        while (low < high && arr[low] <= pivot) {
            low++;
        }
        arr[high] = arr[low];
    }
    arr[low] = pivot;
    return low;
}

上述代码实现了QuickSort算法的核心部分,即分治思想的实现。其中,quickSort方法用于分解问题;partition方法用于分治过程中的处理。

此外,为了减小代码复杂度,我们可以将以上代码进行封装,实现更为优雅的代码:

public static void sort(int[] arr) {
    quickSort(arr, 0, arr.length - 1);
}

private static void quickSort(int[] arr, int left, int right) {
    if (left < right) {
        int pivotIndex = partition(arr, left, right);
        quickSort(arr, left, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, right);
    }
}

private static int partition(int[] arr, int left, int right) {
    int pivot = arr[left];
    int l = left + 1;
    int r = right;
    while (l <= r) {
        if (arr[l] < pivot && arr[r] > pivot) {
            swap(arr, l++, r--);
        }
        if (arr[l] >= pivot) {
            l++;
        }
        if (arr[r] <= pivot) {
            r--;
        }
    }
    swap(arr, left, r);
    return r;
}

private static void swap(int[] arr, int i, int j) {
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}
程序使用

使用以上的适用于QuickSort的Java程序时,只需要在需要进行排序的代码中先进行导入:

import static quicksort.Quicksort.sort;

之后便可使用以下方法进行排序:

int[] arr = {5, 9, 3, 7, 2, 8, 4, 1, 0, 6};
sort(arr);
System.out.println("排序结果为:" + Arrays.toString(arr));

输出结果为:

排序结果为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
结语

以上的程序实现及使用方法旨在帮助程序员更加顺利地应用QuickSort算法,如果您有其他的实现或改进方法,欢迎在评论中分享交流。