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);
}
快速排序
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 今天上午陪老妈看病,下午健身房跑步,晚上想想今天还没有断舍离,马上做,衣架和旁边的的布衣架,一看乱乱,又想想自己是...