题目
排序_牛客网
给定一个数组,请你编写一个函数,返回该数组排序后的形式。
题解
快排
找到哨兵的两种交换思路。(其实都一样哈哈哈哈)
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型vector 待排序的数组
* @return int整型vector
*/
vector<int> MySort(vector<int>& arr) {
// write code here
quickSort(arr,0,arr.size()-1);
return arr;
}
void quickSort(vector<int>& arr,int left,int right){
if(left>=right){
return ;
}
int i=left,j=right,base=arr[left];
while(i<j){
while(arr[j]>=base&&i<j){
--j;
}
while(arr[i]<=base&&i<j){
++i;
}
if(i<j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[left]=arr[i];
arr[i]=base;
quickSort(arr, left, i-1);
quickSort(arr, i+1, right);
}
};
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型vector 待排序的数组
* @return int整型vector
*/
vector<int> MySort(vector<int>& arr) {
// write code here
quickSort(arr, 0, arr.size()-1);
return arr;
}
void quickSort(vector<int>& arr,int low,int high){
int mid = partition(arr, low, high);
if(low<mid-1) quickSort(arr, low, mid-1);
if(mid+1<high) quickSort(arr, mid+1, high);
}
int partition(vector<int>& arr,int low,int high){
int base = arr[low];
while(low<high){
while(low<high&&arr[high]>=base) high--;
arr[low] = arr[high];
while(low<high&&arr[low]<=base) low++;
arr[high] = arr[low];
}
arr[low] = base;
return low;
}
};