public static void quick(int[] data,int _left,int _right){
//判断需要排序的如果是相同位置,或者不合理的左边大于右边的数据,直接跳过
if (_left>=_right){
return;
}
//左指针 最左边
int leftPoint = _left;
//右指针 最右边
int rightPoint = _right;
//辅助量
int aux;
//基准量 设置为最左边的值
int baseValue = data[_left];
//如果左指针移动到与右指针相等的时候,本轮结束
while (leftPoint!=rightPoint){
//向左移动,碰到第一个大于的基准量的值停下
while (rightPoint>leftPoint&&data[rightPoint]>=baseValue){
rightPoint--;
}
//向右移动,碰到第一个小于基准量
while (rightPoint>leftPoint&&data[leftPoint]<=baseValue){
leftPoint++;
}
//如果此时左指针小于右指针,则把两边值交换,
//这样,结束之后,左指针左边都是比它小的,右指针右边都是比他大的
if (rightPoint>leftPoint){
aux = data[rightPoint];
data[rightPoint] = data[leftPoint];
data[leftPoint] = aux;
}
System.out.println(leftPoint+" "+rightPoint);
System.out.println(Arrays.toString(data));
}
//最后把基准值归位,也就是和 此时的右指针交换到中间位置
aux = data[_left];
data[_left] = data[leftPoint];
data[leftPoint] = aux;
System.out.println(Arrays.toString(data));
//再对左边序列 右边序列单独排序
quick(data,_left,leftPoint-1);
quick(data,leftPoint+1,_right);
}
网友评论