欢迎访问宙启技术站
智能推送

Java实现快排算法的函数

发布时间:2023-06-21 06:59:43

快速排序(Quick Sort)是一种常见的排序算法,通过将待排序的数列划分成较小和较大的两个子序列,其中较小的子序列的所有元素都比较大的子序列要小,然后递归排序两个子序列。

以下是Java实现快排算法的函数及其解释:

public static void quickSort(int[] arr, int start, int end) {
    if (start < end) {
        int partitionIndex = partition(arr, start, end);
        quickSort(arr, start, partitionIndex - 1);
        quickSort(arr, partitionIndex + 1, end);
    }
}

private static int partition(int[] arr, int start, int end) {
    int pivot = arr[end]; // 将数组的最后一个元素设为基准数
    int i = start - 1;

    for (int j = start; j < end; j++) {
        if (arr[j] < pivot) {
            i++;
            swap(arr, i, j); // 交换元素
        }
    }

    swap(arr, i + 1, end);

    return i + 1;
}

private static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

首先,我们定义了一个公共的静态函数quickSort,它的作用是对传入的数组进行快速排序。它有三个参数:排序的数组arr,排序的起始点start,排序的结束点end。这个函数会递归的调用自己,把数组不断的分割成子数组来进行排序。

quickSort函数中,我们首先判断是否需要进行排序,如果起始点start小于结束点end,就可以进行排序。接下来我们调用partition函数,返回的是分割后主元(pivot)的下标,然后分别对左右两个子数组调用递归,进行快速排序。

接着我们来看partition函数,它的作用是将数组分割成两个部分,然后返回主元的下标。在这个函数中,我们设定数组的最后一个元素作为主元pivot,初始状态下,我们将i设定为起始下标start-1。然后我们用循环对数组进行遍历,如果某一元素小于主元pivot,就将i与j下标的元素进行交换。最后,我们再将主元pivot与数组中下标为i+1的元素进行交换,这样分割后,数组就被分成了两个部分。

最后,我们定义了一个私有的交换函数swap,用来交换数组中两个元素的位置。

通过以上的Java代码,我们可以了解Java实现快速排序的基本流程和算法思想,这个算法具有时间复杂度为O(nlogn),是相对传统冒泡排序和插入排序算法来说,更加高效和有效的一种排序算法。