2. 实现快速排序,对快速排序算法进行递归以及递归函数后的霍尔划分的实现用java
时间: 2024-11-03 14:14:29 浏览: 23
快速排序是一种高效的排序算法,它基于分治策略,通过一趟排序将待排记录分隔成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行。
以下是使用Java实现快速排序的递归版本以及霍尔(Hoare)划分的基本步骤:
```java
public class QuickSort {
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
// 霍尔划分的核心思想找到中间点pivot
int pivotIndex = partition(arr, low, high);
// 对划分后的两个子数组递归调用quickSort
quickSort(arr, low, pivotIndex - 1); // 左半部分
quickSort(arr, pivotIndex + 1, high); // 右半部分
}
}
private int partition(int[] arr, int low, int high) {
// 选择第一个元素作为枢轴
int pivotValue = arr[low];
int i = low;
int j = high;
while (i < j) {
// 从右向左找到第一个小于pivot的数
while (i < j && arr[j] >= pivotValue) {
j--;
}
arr[i] = arr[j];
// 从左向右找到第一个大于pivot的数
while (i < j && arr[i] <= pivotValue) {
i++;
}
arr[j] = arr[i];
}
// 将枢轴放到最终位置
arr[i] = pivotValue;
return i; // 返回枢轴的新位置
}
// 测试代码
public static void main(String[] args) {
int[] arr = {5, 9, 1, 7, 3, 6, 8};
QuickSort quickSort = new QuickSort();
quickSort.quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
在这个示例中,`quickSort`方法是主函数,`partition`方法实现了霍尔划分。在每次递归调用前,我们先通过`partition`找到枢轴的位置,并将其两侧的元素交换,使得左边的数都小于枢轴,右边的数都大于枢轴。然后,对左右两个子数组再进行递归调用,直到整个数组有序。
阅读全文