STL经典算法集锦<三>之partition与qsort

最后更新于:2022-04-01 07:30:37

## STL经典算法集锦<三>之partition与qsort STL的分割算法主要使用了仿函数来实现。而此处的分割则不,此处实现了两种形式的分割算法:非随机分割算法、随机分割算法(随机算法是在非随机算法的基础上封装而成)。而快速排序则只需简单依赖分割算法就能实现。 **非随机分割算法:** ~~~ int partition(int array[],int left,int right) { //选择最右侧的元素作为分割标准 int index = left; int pivot = array[right]; //将所有小于标准的点移动到index的左侧 for (int i=left; i<right; i++) { if (array[i] < pivot) swap(array[index++],array[i]); } //将标准与index指向的元素交换,返回index,即分割位置 swap(array[right],array[index]); return index; } ~~~ **随机分割算法:** ~~~ int random(int floor,int ceil) { srand(time(0)); return floor+random()%(ceil-floor+1); } int randomizedPartition(int array[],int left,int right) { //随机一个元素作为分割的标准 int i=random(left,right); //将标准移动到最右侧 swap(array[right],array[i]); partition(array,left,right); } ~~~ **快速排序:** ~~~ void qsort(int array[],int left,int right) { if(left<right) { int mid; //mid=randomizedPartition(array,left,right); mid=partition(array,left,right); qsort(array,left,mid-1); qsort(array,mid+1,right); } } ~~~ 两种形式的分割算法的单词输出为: 非随机算法: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a421215b5de.gif) 随机算法: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a421216731d.gif)
';