基本思路
/**
* 1 取最后面的值pivot,以该值为中心将数据分成两半
* 2 定义index指针,用于从左到右遍历数组,初始值为left
* 3 定义target指针,用于存储目前比pivot大的值的位置,初始值为left
* 4 遍历过程,遍历至倒数第二个
* 4.1 循环中每次遇到比pivot小的值,即与当前target位置的值交换,之后target++
* 4.2 若遇到的值大于或等于pivot,则不交换,target继续停留
* 4.3 每次循环index++
* 5 循环结束,再将最后的值(即pivot)与target处的值交换。此时完成一次快排
* 6 再将左边部分和右边部分进行递归快排 完事
*/
public static void kspx(ArrayList<Integer> data,int left,int right){
int index = left;
int target = left;
int temp;
int pivot = data.get(right);
for (;index<right;index++){
if(data.get(index)<pivot){
if(target!=index){
temp = data.get(target);
data.set(target,data.get(index));
data.set(index,temp);
}
target++;
}
}
data.set(right,data.get(target));
data.set(target,pivot);
if(target-left>=2)
Kspx.kspx(data,left,target-1);
if(right-target>=2)
Kspx.kspx(data,target+1,right);
}