通过Java函数实现快速排序
快速排序是一种常见的排序算法,其运用了一种分治的思想,将排序问题划分为多个子问题,再分别处理,最后合并结果。快速排序是一种高效的排序算法,尤其适用于大数据量的排序。本文将通过Java函数实现快速排序。
1. 算法流程
快速排序的基本思想是:先从序列中取出一个数作为基准数(通常是 个数),然后将序列中所有小于基准数的数放到基准数的左边,将大于基准数的数放到基准数的右边,再分别对左右两边的序列重复这个过程,直到整个序列有序。整个排序过程可以用如下的递归函数实现:
public static void quickSort(int[] arr, int left, int right) {
if (left >= right) return;
int i = left, j = right, pivot = arr[left]; // pivot是基准数
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
if (i < j) arr[i++] = arr[j];
while (i < j && arr[i] <= pivot) i++;
if (i < j) arr[j--] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1); // 对左边的子序列排序
quickSort(arr, i + 1, right); // 对右边的子序列排序
}
上面的函数采用了双指针的方式实现快速排序。首先,以序列的 个数为基准数,定义变量left和right表示左右两端的索引位置。从右到左遍历序列,找到 个小于基准数的数,将其放到基准数左侧。然后从左到右遍历序列,找到 个大于基准数的数,将其放到基准数右侧。如此循环进行,直到左右指针相遇。
下面是一个例子,说明该算法是如何对序列进行排序的。

最终数组的排序结果为:[5, 6, 9, 11, 13, 16, 28, 39, 59, 78, 94, 99, 100]
2. 算法分析
快速排序是一种原地排序算法,即不需要额外的内存空间来存储临时数据。其时间复杂度为O(NlogN),在最坏情况下为O(N^2)。最坏情况出现在序列已经有序的情况下,或者全部元素都相等的情况下。为了避免出现最坏情况,可以选择随机选择基准数,或者采用三数取中法来选择基准数。
3. 示例代码
下面是一个示例代码,展示了如何通过Java函数实现快速排序。
public class QuickSort {
public static void main(String[] args) {
int[] arr = {16, 39, 13, 11, 100, 6, 5, 78, 99, 28, 59, 94, 9};
quickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void quickSort(int[] arr, int left, int right) {
if (left >= right) return;
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
if (i < j) arr[i++] = arr[j];
while (i < j && arr[i] <= pivot) i++;
if (i < j) arr[j--] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
}
