注:使用左右指针时,如果选择数组左边为标准点,则需要先移动右边指针
一、算法核心思想
不断将一个数组中大的数放在选取的标准数右边,比标准数小的放在标准数左边(一般情况,当然你可以小的放左边大的放右边)
二、图解
三、代码
/**
* 快速排序 前后指针
* 侧重注意,如果是以前面为标准key,需要先从最后开始移动指针
*/
public static int[] quickSort2(int[] array, int low, int high){
if(low < high){
//此时设第一个数为key
int key = array[low], i = low, j = high;
while (i < j){
//从右边开始移动指针
//此时右边的值都大于key,不需要交换,继续指针向前移动
while (i < j && array[j] >= key){
j--;
}
while (i < j && array[i] <= key){
i++;
}
if(i < j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
//交换key和重合指针的值
array[low] = array[i];
array[i] = key;
//递归
quickSort2(array, low, i - 1);
quickSort2(array, i + 1, high);
return array;
}
return array;
}
图是用画图画的,相当丑。以上为个人笔记
来源:CSDN
作者:a_123gogo
链接:https://blog.csdn.net/a_123gogo/article/details/103972618