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

快速排序算法实现的Java函数

发布时间:2023-06-21 21:02:06

快速排序是一种常用的排序算法,其原理是将一个数组或者列表分成两个子序列,其中左侧子序列的所有元素都小于右侧子序列的所有元素,然后递归调用这个过程以达到排序的目的。

在Java语言中,快速排序的实现通常采用递归的方式,下面是一个使用Java实现的快速排序算法:

public static 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 static 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 函数来递归地对子序列进行排序。该函数接收三个参数:

1. 待排序的数组 arr

2. 数组的最小下标值 low

3. 数组的最大下标值 high

low 小于 high 时,我们需要找到一个中心点,即分区点 pivot,然后将数组划分成两个子序列并递归排序。这一过程使用了一个 partition 函数,它会对数组进行划分并返回分区点的下标。

partition 函数的基本思想是取数组的 个元素为中心点 pivot,然后分别从左侧和右侧扫描数组,交换比 pivot 小的元素和比 pivot 大的元素。最后,我们将 pivot 放回数组中正确的位置,即在左侧子序列的所有元素都小于右侧子序列的所有元素。

快速排序算法使用了递归的方式,递归深度与待排序数组的长度相关。当待排序数组长度为n时,最优情况下递归深度为lgn,最坏情况下递归深度为n。因此,快速排序最坏情况下的时间复杂度为 O(n^2),而在平均情况下,快速排序的时间复杂度为 O(nlogn)。

总之,使用Java语言实现快速排序算法只需要简单的代码就可以实现。同时,快速排序算法具有递归深度经常降低的优点,可以在数据非常大的情况下进行排序,但需要注意最差的情况下时间复杂度的问题。