如何只对一个元素进行排序?这就是快排里面的partition部分
partition的本质是只对一个元素进行排序
不如叫sort_one_num或者sort_the_key
partition锁定vec的一个片段,选取最右边的数称为vec[key]并将其在这个片段中排好序
对一个元素排序?效果就是key左边的数比key小,key右边的数比key大
返回这个位置,称之为sorted,即完成了对这个元素的排序
每次只选最右边的数作为key不太公平,rand_partition随机选一个数将其sort
//core
int partition(int start, int key){//vec[key]will be sorted
int cut = start - 1;//init to no where
for(int i = start; i < key; i++)if(vec[i] <= vec[key])swap(&vec[i], &vec[++cut]);
swap(&vec[++cut], &vec[key]);
return cut;
}
//core
void quick(int start, int end){
if(start < end){
int sorted = partition(start, end);
quick(start, sorted-1);
quick(sorted+1, end);
}
}