public void quickSort(List<Integer> select, int begin, int end) throws Exception {
//迭代终止条件
if (end <= begin) {
return;
}
int flag = select.get(begin);//标尺值
int left = begin;//左指针
int right = end;//右指针
while (left < right) {
//第一步找到右指针小于左指针的数,如果没有,左右指针重合,循环结束
if (select.get(left) < select.get(right)) {
right--;
continue;
}
if(left==right){
break;
}
//第二步,找到右指针小于左指针的数,交换左右指针的值,左指针所代表的值已比对过,下次不在比对,左指针+1
//右指针所代表的值是标尺值
int temp=select.get(left);
select.set(left,select.get(right));
select.set(right,temp);
left++;
//第三步找到左指针比右指针大的数,如果没有,左右指针重合,循环结束
while(left<right&&select.get(left)<select.get(right)){
left++;
continue;
}
if(left==right){
break;
}
//第四步,找到左指针大于右指针的数,交换左右指针代表的数,右指针-1,左指针代表标尺值
int temp2=select.get(left);
select.set(left,select.get(right));
select.set(right,temp2);
right--;
}
//左右指针重合,以该重合位置为边界,左边指针代表数字集合小于右边指针代表数字集合,分别迭代左右指针集合,当子集合长度为0时,终止迭代
quickSort(select,begin,left-1);
quickSort(select,left+1,end);
}
快速排序
最新推荐文章于 2023-12-01 23:14:38 发布