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

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

发布时间:2023-06-26 05:12:15

快速排序算法是常用的排序算法之一,它的原理是通过选取一个基准值(pivot),将待排序序列分为左右两个部分,其中左边部分的所有元素小于等于基准值,右边部分的所有元素大于基准值。之后对左右两部分分别递归地进行快速排序,直到排序完成。

Java中实现快速排序算法的函数,可以通过以下步骤实现:

1.编写一个快速排序函数,该函数含有三个参数:待排序数组,数组的起始位置和数组的结束位置。

public static void quickSort(int[] arr, int start, int end) {

    //...

}

2.在函数中选取一个基准值pivot,通常可以选择数组的最后一个元素。

int pivot = arr[end];

3.定义左右指针left和right,分别指向数组的起始位置和结束位置,并利用while循环将左右两个部分进行排序。

int left = start, right = end;

while (left < right) {

    //...

}

4.在while循环中,先从左边部分找到第一个大于等于基准值的元素,再从右边部分找到第一个小于等于基准值的元素,并将它们交换位置。

while (left < right && arr[left] < pivot) {

    left++;

}

while (left < right && arr[right] > pivot) {

    right--;

}

if (left < right) {

    int temp = arr[left];

    arr[left] = arr[right];

    arr[right] = temp;

}

5.在循环结束后,将基准值放到正确的位置。

if (arr[left] >= pivot) {

    int temp = arr[left];

    arr[left] = arr[end];

    arr[end] = temp;

}

else {

    left++;

    int temp = arr[left];

    arr[left] = arr[end];

    arr[end] = temp;

}

6.然后对左右两个部分递归调用quickSort函数进行排序。

quickSort(arr, start, left - 1);

quickSort(arr, left + 1, end);

完整的快速排序函数代码如下:

public static void quickSort(int[] arr, int start, int end) {

    if (start >= end) {

        return;

    }

    int pivot = arr[end];

    int left = start, right = end;

    while (left < right) {

        while (left < right && arr[left] < pivot) {

            left++;

        }

        while (left < right && arr[right] > pivot) {

            right--;

        }

        if (left < right) {

            int temp = arr[left];

            arr[left] = arr[right];

            arr[right] = temp;

        }

    }

    if (arr[left] >= pivot) {

        int temp = arr[left];

        arr[left] = arr[end];

        arr[end] = temp;

    }

    else {

        left++;

        int temp = arr[left];

        arr[left] = arr[end];

        arr[end] = temp;

    }

    quickSort(arr, start, left - 1);

    quickSort(arr, left + 1, end);

}

通过上述步骤实现的快速排序算法可以在O(nlogn)的时间复杂度内对数列进行排序。