每次选一个轴pivot(我选数组的第一个元素arr[p]
),遍历其余数组元素使得比arr[p]
大的数都在arr[p]
的右边,比arr[p]
小的数都在arr[p]
的左边,然后递归处理arr[p]
的左边和arr[p]
的右边。
注意:
#include <iostream>
#include <vector>
#include <unistd.h>
using namespace std;
int quickSort(vector<int> &arr,int l,int r)
{
int len = r+1;
int povit = arr[l];
int index = l;
l++;
while(l<=r)
{
while(l<len&&arr[l]<=povit) l++;
while(r>index&&arr[r]>=povit) r--;
// cout<<"l = "<<l<<" r = "<<r<<endl;
if(l<len&&r>0&&r>l)
{
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
arr[index] = arr[r];
arr[r] = povit;
return r;
}
void recrusion(vector<int> &arr,int l,int r)
{
//cout<<"new rec l = "<<l<<" r = "<<r<<endl;
if(l>=r) return;
int index = quickSort(arr,l,r);
recrusion(arr,l,index-1);
recrusion(arr,index+1,r);
return;
}
int main()
{
int a[] = {38,17,50,77,40,205,5};
vector<int> arr(a,a+7);
recrusion(arr,0,arr.size()-1);
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}