快速排序(QuickSort)是一种高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。以下是Java实现快速排序的代码示例:
public class QuickSort {
// 主方法,用于测试
public static void main(String[] args) {
int[] array = {10, 7, 8, 9, 1, 5};
int n = array.length;
QuickSort ob = new QuickSort();
ob.sort(array, 0, n-1);
System.out.println("Sorted array:");
printArray(array);
}
// 快速排序算法的实现
void sort(int[] array, int low, int high) {
if (low < high) {
// pi 是分区索引,array[pi] 已经在正确的位置
int pi = partition(array, low, high);
// 分别对左右子数组进行排序
sort(array, low, pi - 1);
sort(array, pi + 1, high);
}
}
// 分区操作,选择最后一个元素作为基准
int partition(int[] array, int low, int high) {
int pivot = array[high]; // 选择最右边的元素作为基准
int i = (low - 1); // i 是较小元素的索引
for (int j = low; j <= high - 1; j++) {
// 如果当前元素小于或等于基准
if (array[j] <= pivot) {
i++;
// 交换 array[i] 和 array[j]
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
// 交换 array[i + 1] 和 array[high] (或基准)
int temp = array[i + 1];
array[i + 1] = array[high];
array[high] = temp;
return i + 1;
}
// 打印数组的方法
static void printArray(int[] array) {
int n = array.length;
for (int i = 0; i < n; ++i)
System.out.print(array[i] + " ");
System.out.println();
}
}
代码说明:
- 主方法 (
main
):
- 创建一个包含若干整数的数组。
- 调用
QuickSort
类的sort
方法进行排序。 - 调用
printArray
方法打印排序后的数组。
sort
方法:
- 递归地对数组进行排序。
- 如果
low
小于high
,则找到分区索引pi
,然后分别对左右子数组进行排序。
partition
方法:
- 选择数组的最后一个元素作为基准(pivot)。
- 遍历数组,将小于或等于基准的元素移动到左边。
- 最后,将基准元素放到正确的位置(即
i + 1
处),并返回该位置索引。
printArray
方法:
- 打印数组中的元素。
注意事项:
- 快速排序的最坏时间复杂度为 O(n^2),但在平均情况下时间复杂度为 O(n log n)。
- 可以选择不同的基准元素(如第一个元素、最后一个元素、中间元素或随机元素)来优化算法的性能。
- 快速排序是就地排序(in-place sort),不需要额外的存储空间。
这个代码示例展示了基本的快速排序实现,适用于大多数情况下的排序需求。