快速排序
2021-06-08 18:03
标签:png load 遍历 while 默认 swa 代码实现 stat code 原理:递归+分治 从数组中选取一个基准点,将数组中小于这个基准点的元素放到基准点左边,大于这个基准点的元素放到右边 默认每次选取最后一个元素当作基准点,定义变量i,j分别指向数组的左端和右端前一个元素 i 向右移动扫描比基准点大的数, 如果比基准点小或等于则继续移动, j 向左移动扫描比基准点小的数,如果比基准点大或等于则继续移动, i,j要么是 i ,要么是 i = j i 交换完成后,如果 i 还是小于 j 则说明遍历还未完成,i,j 继续移动,如果满足条件继续交换元素 如果 i=j,说明遍历完成,已经将所有小的数放到了基准点左边,大的数放到了基准点的右边 则,判断 i,j指向的数是否大于基准点,如果大于,交换 i 和基准点 此时 i,j指向的数就是新的基准点,基准点左边的数都小于它,基准点右边的数都大于它, 此时一轮排序完成,将新的基准点返回,此时数组被分割成了两段,将左边和右边的元素传入递归调用 分别选定基准点并进行划分,这个划分的流程跟上面的一致,但是数组的规模变小了,这就是分治的思想。 左递归 右递归 最后一次,以15为基准点,i,j都指向10,此时不满足交换条件,则递归结束,至此所有数字就找到了应在的位置 快速排序 标签:png load 遍历 while 默认 swa 代码实现 stat code 原文地址:https://www.cnblogs.com/fkPrograming/p/14521807.html快速排序
代码实现
//交换函数
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//入口函数
public static void quickSort(int[] arr, int left, int right) {
if (left = pivot) j--;
if (i arr[right]) {
swap(arr, i, right);
}
return i;
}