快速排序
void quick_sort(vector<int> &nums,int l,int r){
if(l>=r){ //只剩一个值时,返回。
return;
}
int left = l,right = r,key=nums[left];
while(l<r){
while( left<right && key >= nums[right]){
right--;
}
num[left] = num[right];
while( left<right && key <= nums[left]){
left++;
}
num[right] = num[left];
}
num[l] = key; //第一个值赋给最初的位置,别忘了。
quick_sort(nums,l,left-1);
quick_sort(nums,left+1,r);
}
归并排序
void merge_sort(vector<int> &nums,int l,int r,vector<int> &tmp){
if(l+1<=r){
return;
}
int m = l + (r-l)/2;
merge_sort(nums,l,m,tmp);
merge_sort(nums,m,r,tmp);
// 两边外排。
int p1 = l,p2=m, i=l;
while(p1<m && p2<r){
tmp[i++] = p1<p2? nums[p2++]:nums[p1++];
}
while(p1<m){
tmp[i++] = nums[p1++];
}
while(p2<r){
tmp[i++] = nums[p2++];
}
for(i=l;i<r;i++){
nums[i] = tmp[i];
}
}