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

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

发布时间:2023-06-17 06:07:25

快速排序是一种常用的排序算法,时间复杂度为O(nlogn)。其基本思想为选取一个枢轴元素,将待排序序列划分为两部分,一部分比枢轴元素小,一部分比枢轴元素大。然后对两部分分别进行快速排序,最终将整个序列有序化。

在Java中实现快速排序算法的函数,可以选择使用递归或非递归方式实现。

递归实现:

首先定义一个quickSort()函数来实现快速排序。其基本思路为:

1. 选取一个枢轴元素,将待排序序列分成左右两部分。

2. 对左右两部分分别进行递归排序。

3. 将左右两部分合并起来,得到最终的有序序列。

Java代码如下所示:

public 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);
    }
}

public 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++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

上述代码中,partition()函数用于将待排序序列划分成左右两部分,并返回枢轴元素的位置。quickSort()函数则利用递归实现快速排序。

非递归实现:

另一种实现快速排序的方式是使用栈来实现非递归快速排序。其基本思路为:

1. 选取一个枢轴元素,将待排序序列分成左右两部分。

2. 将左右两个小序列压入栈中。

3. 循环弹出栈顶元素,对其进行partition操作,并将划分出来的小序列压入栈中。

4. 直到栈为空,排序结束。

Java代码如下所示:

public static void quickSort(int[] arr, int low, int high) {
    Stack<Integer> stack = new Stack<>();
    stack.push(low);
    stack.push(high);

    while (!stack.isEmpty()) {
        high = stack.pop();
        low = stack.pop();
        int pi = partition(arr, low, high);

        if (pi - 1 > low) {
            stack.push(low);
            stack.push(pi - 1);
        }

        if (pi + 1 < high) {
            stack.push(pi + 1);
            stack.push(high);
        }
    }
}

public 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++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

上述代码中,使用栈来实现快速排序。首先将整个序列的区间压入栈中,然后循环弹出栈顶元素,利用partition()函数对其进行划分。如果划分出来的左右两个小序列元素个数大于1,则将其压入栈中,继续进行操作。当栈为空时,排序结束。

综上所述,Java中实现快速排序算法的函数,有递归和非递归两种实现方式。可以根据具体需求选择合适的实现方式。