快速排序
快速排序的思想是这样的,如果要对数组区间 [p, r] 的数据进行排序,我们先选择其中任意一个数据作为 pivot(分支点),一般为区间最后一个元素。
然后遍历数组,将小于 pivot 的数据放到左边,将大于 pivot 的数据放到右边。接着,我们再递归对左右两边的数据进行排序,直到区间缩小为 1 ,说明所有的数据都排好了序。
填坑法:快速排序的另一种实现方式如下所示,先取出一个元素作为 pivot(假设是最后一个),这时 pivot 位置可以看作为空,然后从左到右查找第一个比 pivot 大的元素放在 pivot 的位置,此时空的地方变成了这第一个比 pivot 大的元素位置。 然后从右到左查找第一个比 pivot 小的元素放在刚才空的位置,依次循环直到从左到右和从右到左都查找到了同一位置,这时候再把 pivot 放置在最后一个空位。这个过程可以形象的被称为“挖坑填坑”。

代码示例:
public static int[] test(int arr[],int begin,int last){
while (begin>last){
return null;
}
int i=begin;
int j=last;
int pivot=arr[j];
while (i<j){
while (i<j && arr[i]<=pivot){
i++;
}
if (arr[i]>pivot){
arr[j--] = arr[i];
}
while(i<j && arr[j]>pivot){
j--;
}
if (i<j && arr[j]<pivot){
arr[i++]=arr[j]; //此处是i++,还是i;测试是一样的,先赋值在+1
}
}
if (i==j){
arr[i]=pivot;
}
test(arr,begin,i-1);
test(arr,i+1,last);
return arr;
}
posted on 2022-10-28 18:13 RICH-ATONE 阅读(81) 评论(0) 收藏 举报
浙公网安备 33010602011771号