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

快速排序:Java函数实现

发布时间:2023-06-09 17:14:08

快速排序是十分常用的排序算法,具有简洁高效的特点。它是一种分治的策略,将问题分解为许多小规模子问题进行解决。快速排序的基本思想是选定一个中间值(一般选为第一个或最后一个),将数组分成小于中间值和大于中间值的两部分,并对于这两个部分进行递归。这个过程可以用如下伪代码描述:

Partition(A, p, r)
    x := A[r]
    i := p-1
    for j = p to r-1
        if A[j] <= x
            i := i+1
            swap(A[i], A[j])
    swap(A[i+1], A[r])
    return i+1

QuickSort(A, p, r)
    if p < r
        q := Partition(A, p, r)
        QuickSort(A, p, q-1)
        QuickSort(A, q+1, r)

Partition函数是快速排序的核心部分,它选择最后一个元素作为中间值,将数组分为小于等于中间值和大于中间值的两部分。

在Java语言中,可以使用递归的方式实现快速排序。以下是该算法的Java实现:

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

int partition(int[] arr, int begin, int end) {
    int pivot = arr[end];
    int i = (begin - 1);
    for (int j = begin; j < end; j++) {
        if (arr[j] <= pivot) {
            i++;

            int swapTemp = arr[i];
            arr[i] = arr[j];
            arr[j] = swapTemp;
        }
    }

    int swapTemp = arr[i + 1];
    arr[i + 1] = arr[end];
    arr[end] = swapTemp;

    return i + 1;
}

在该实现中,quickSort函数通过不断递归调用实现排序。partition函数找到中间值并调整数组顺序,以实现快速排序的分治策略。此外,这里也使用了Java语言中的数组交换语法,使得代码更加清晰易懂。

该实现的时间复杂度为均摊O(nlogn),因为在最好情况下,排序大约需要进行nlogn次分割。而在最坏情况下,排序需要进行n次分割,时间复杂度为O(n^2)。而对于随机数据来说,快速排序算法通常非常高效,因为它能够充分利用处理器的缓存和流水线机制。