快速排序
快速排序的思想是这样的,如果要对数组区间 [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 阅读(52) 评论(0) 编辑 收藏 举报