手写快排
链接: link.
#include <iostream>
using namespace std;
void quick_sort(int l,int r,int a[])
{
if(l>=r) //一定要写 防止l>=r的情况执行最下面的sort
return;
int cur_x=l; //左端下标
int cur_y=r;//右端下标
int tmp=a[l];//基值
while(cur_x<cur_y)
{
while(cur_x<cur_y&&a[cur_y]>=tmp)
cur_y--;
if(cur_x<cur_y)
{
a[cur_x]=a[cur_y];
cur_x++;
}
while(cur_x<cur_y&&a[cur_x]<=tmp)
cur_x++;
if(cur_x<cur_y)
{
a[cur_y]=a[cur_x];
cur_y--;
}
}
a[cur_x]=tmp;
quick_sort(l,cur_x - 1,a);
quick_sort(cur_x + 1,r,a);
}
int main() {
int a[10]={2,1,3,4,5,6,2,3,1,0};
quick_sort(0,9,a);
for(int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
//cin >> a;
cout << "Hello World!" << endl;
}
简化版
void qsort(int l int r, vector<int>& a)
{
int i=l, j=r;
int x=a[l];
while(i<j)
{
while(i<j&&a[j]>x) j--;
if(i<j) {a[i]=a[j];i++} //不能有j--,因为j这个位置空了,需要下一轮的a[i]补上
while(i<j&&a[i]<X)i++;
if(i<j) {a[j]=a[i];j--}
}
a[i]=x;
qsort(l,i-1,a);
qsort(i+1,r,a);
}
qsort(0, n-1, a);