快排(点击查看图示)
思想: 1、从数列中挑出一个基准值。h 2、最左边为l最后面为r,依次和该基数h对比,当l比基数h大时,就r方找到一个比h基数小的和l方的交换,直到l<r就证明遍历完了 3、把l=r的值赋值为h,继续上述操作
public class QuickSort {
public static void main(String[] args) {
int[] array = {49, 38, 65, 97, 76, 13, 27, 49};
QuickSort quickSort = new QuickSort();
// 传入排序数组、数组下标(首个和末尾)
System.out.println(Arrays.toString(quickSort.Quick(array, 0, array.length - 1)));
}
// 递归实现快排,用枢轴分为两个子表,依次排序
int[] Quick(int[] array, int low, int high) {
// 跳出循环的条件
if (low < high) {
int partition = Partition(array, low, high);
Quick(array, low, partition - 1);
Quick(array, partition + 1, high);
}
return array;
}
// 对比和交换 while循环
int Partition(int[] array, int low, int high) {
int pivot = array[low];
// low和high之间是否还存在元素
while (low < high) {
// 判断 high所指的元素 是否 大于枢轴元素 大于的话为true比较下一个 直到找到一个小于的
while (low < high && array[high] >= pivot) high--;
//小于 把high所指的元素放到low所指的位置
array[low] = array[high];
//判断low所指的元素 是否 小于枢轴元素 小于的话为true比较下一个 直到找到一个大于的
while (low < high && array[low] <= pivot) ++low;
// 把low所指的元素 放到high所指的位置
array[high] = array[low];
}
array[low] = pivot;
return low;
}
}
- THE END -
最后修改:2024年5月24日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://jiaheming.cn/2023/09/%e6%af%94%e8%be%83%e6%8e%92%e5%ba%8f/

共有 0 条评论