介绍
快速排序是一种常用的排序算法,其时间复杂度为 O(n)。它的基本思路是通过分治的方式将一个大问题分解成若干个小问题,再通过递归的方式将小问题解决,最终将所有小问题的解合并起来得到大问题的解。下面我们来看一下 Java 快速排序的实现步骤和示例代码。
实现步骤
Java 快速排序的实现步骤如下:
- 选取一个基准元素(pivot),一般选择第一个元素或最后一个元素。
- 将序列中小于基准元素的元素放在基准元素的左边,大于基准元素的元素放在基准元素的右边。这个过程称为分区(partition)。
- 对左右两个分区分别递归地进行步骤 1 和步骤 2,直到分区中只有一个元素或者为空。
示例代码
下面是 Java 快速排序的示例代码:
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int pivot = partition(arr, left, right);
quickSort(arr, left, pivot - 1);
quickSort(arr, pivot + 1, right);
}
}
private static int partition(int[] arr, int left, int right) {
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j) {
while (i <= j && arr[i] <= pivot) {
i++;
}
while (i <= j && arr[j] > pivot) {
j--;
}
if (i < j) {
swap(arr, i, j);
}
}
swap(arr, left, j);
return j;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
优缺点
Java 快速排序的优点有:
- 时间复杂度为 O(n),效率较高。
- 对于大规模数据排序表现良好。
Java 快速排序的缺点有:
- 对于小规模数据排序效率较低,因为递归的层数较多。
- 对于近乎有序的数据排序效率较低,因为分区不均衡。