// 快速排序
public static void QuickSort(int[] arr, int left, int right) {
// 边界条件
if (left >= right) {
return;
}
int partition = partition(arr, left, right);
// 左递归快排
partition(arr, left, partition - 1);
// 右递归快排
partition(arr, partition + 1, right);
}
// 快速排序的逻辑,返回的是哨兵的下标(左侧元素小于哨兵,右侧元素都大于哨兵)
public static int partition(int[] arr, int left, int right) {
// 设置哨兵在末尾
int pilot = right;
// 设置小于哨兵元素的个数,初始为left,也就是0
int counter = left;
// 循环查找
for (int i = left; i < right; i++) {
// 如果找到小于哨兵的元素,就交换位置
if (arr[i] < arr[pilot]) {
int temp = arr[i];
arr[i] = arr[counter];
arr[counter] = temp;
// 小于哨兵的元素多一个
counter++;
}
}
// 哨兵位置存放的就是小于其值得元素的个数
int temp2 = arr[pilot];
arr[pilot] = arr[counter];
arr[counter] = temp2;
return counter;
}
快速排序
最新推荐文章于 2023-10-28 18:09:35 发布