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

Java函数实现快速排序算法的步骤和代码示例

发布时间:2023-09-14 14:16:08

快速排序(Quick Sort)是一种高效的排序算法,它的基本思想是通过一趟排序将待排序的记录分割成独立的两部分,其中一部分的所有序列均比另一部分小,然后再按此方法对这两部分分别进行快速排序,整个过程可以递归进行,以达到整个序列有序的目的。

下面是快速排序算法的步骤:

1. 选择一个基准元素(pivot),可以是数组中的任意一个元素。

2. 将数组分为两部分,比基准元素小的元素放在左边,比基准元素大的元素放在右边,基准元素在中间。

3. 对左右两个部分递归地进行快速排序。

4. 重复以上步骤,直到各部分只有一个元素或为空。

实现快速排序算法的Java代码示例如下:

public class QuickSort {

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

    private static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high); // 根据基准元素分割数组
            quickSort(arr, low, pi - 1); // 对左半部分进行快速排序
            quickSort(arr, pi + 1, high); // 对右半部分进行快速排序
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high]; // 将最后一个元素设为基准元素
        int i = low - 1; // 指向最后一个小于基准元素的元素的索引

        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr, i, j); // 将小于基准的元素放到左边
            }
        }

        swap(arr, i + 1, high); // 将基准元素放到正确的位置上
        return i + 1; // 返回基准元素的索引
    }

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

    public static void main(String[] args) {
        int[] arr = {10, 5, 2, 8, 7, 1, 3};
        quickSort(arr);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

上述代码中,quickSort方法是快速排序的入口方法,它首先调用了一个重载的方法quickSort,传入数组、最低索引和最高索引作为参数。

在递归方法quickSort中,首先判断最低索引是否小于最高索引,如果是,则调用partition方法将数组分割,并得到基准元素的索引pi。再对分割后的数组的左半部分和右半部分分别进行快速排序。

partition方法中,选择最后一个元素作为基准元素,使用双指针i和j分别扫描整个数组。当遇到比基准元素小的元素时,将i右移一位,并将i和j对应的元素交换位置,确保小于基准的元素都在左边。

最后,将基准元素放到正确的位置上,返回基准元素的索引。

在main方法中,我们创建一个数组并调用quickSort方法进行排序,然后打印排序后的结果。

通过以上步骤,我们就实现了快速排序算法,并得到了排序后的结果。快速排序的时间复杂度为O(nlogn),是一种非常高效的排序算法。