快速排序(QuickSort)是一种高效的排序算法,它采用分而治之的策略来对一个数组进行排序。其核心思想是选取一个“基准”元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
下面是快速排序的一个简单Java实现:
public class QuickSort {
/**
* 快速排序方法
* @param arr 待排序数组
* @param low 排序范围的起始索引
* @param high 排序范围的结束索引
*/
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
// partitionIndex是分区操作后基准值的最终位置
int partitionIndex = partition(arr, low, high);
// 递归地对基准值左边的子数组进行快速排序
quickSort(arr, low, partitionIndex - 1);
// 递归地对基准值右边的子数组进行快速排序
quickSort(arr, partitionIndex + 1, high);
}
}
/**
* 分区操作
* @param arr 待排序数组
* @param low 排序范围的起始索引
* @param high 排序范围的结束索引
* @return 分区后基准值的索引
*/
private static int partition(int[] arr, int low, int high) {
// 选择最右边的元素作为基准值
int pivot = arr[high];
// i用于标记小于基准值的最后一个元素的索引
int i = low - 1;
for (int j = low; j < high; j++) {
// 如果当前元素小于或等于基准值
if (arr[j] <= pivot) {
i++;
// 交换arr[i]和arr[j]
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;
}
// 示例用法
public static void main(String[] args) {
int[] arr = {10, 7, 8, 9, 1, 5};
quickSort(arr, 0, arr.length - 1);
System.out.println("Sorted array: ");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
在这个实现中,`quickSort` 方法是快速排序的递归实现,而 `partition` 方法则负责进行分区操作,选择最右边的元素作为基准值,通过遍历数组将小于基准值的元素放到基准值的左边,大于基准值的元素放到基准值的右边,并返回基准值最终的位置。最后,在 `main` 方法中提供了一个示例数组,并调用 `quickSort` 方法对其进行排序。