快排
快速排序主要思路
通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序。
上代码
int patition(vector<int>& arr, int left, int right){
int i = left - 1;
int flag = arr[right];//
for (int j = left; j < right; j++){
if (arr[j] <= flag){//比flag小的,都放到前面去
int tmp = arr[++i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
arr[right] = arr[++i];
arr[i] = flag;//这里一交换 比flag大的,就放到后面去了
return i;//返回flag的位置
}
void quicksortHelp(vector<int>& arr, int left, int right){
if (left < right){
int q = patition(arr, left, right);
quicksortHelp(arr, left, q - 1);
quicksortHelp(arr, q + 1, right);
}
}
void quicksort(vector<int> &arr){
quicksortHelp(arr, 0, arr.size() - 1);
}