原理:
1.将第一个点作为基准
2.从右到左寻找小于基准的点(必须先从右到左)
3.从左到右寻找大于基准的点
4.交换找到的点
5.当两个点遍历到同一位置时,交换该点与基准点(此时,该点左侧的数都小于该点,右侧都大于)
6.以该点为中心(除去该点),分别再次计算左侧和右侧,递归下去
void FastSort(vector<int>& arr,int start,int end){
if(start >= end)
return;
int up = start;
int down = end;
int base = arr[start];
while(up < down){
while(up < down && arr[down] >= base){
down--;
}
while(up < down && arr[up] <= base){
up++;
}
if(up != down){
int tmp = arr[up];
arr[up] = arr[down];
arr[down] = tmp;
}else{
arr[start] = arr[up];
arr[up] = base;
}
}
FastSort(arr,start,up-1);
FastSort(arr,up+1,end);
}
vector<int> MySort(vector<int>& arr) {
// write code here
int length = arr.size();
FastSort(arr,0,length-1);
return arr;
}