快速排序的意思是找一个数作为基准数,一般是最后一个数,然后让i的左边比基准数小,j的右边比基准数大。
先让ij为第一个数字,可设置循环j从开头自增,如果第j个数字小于基准数,则i自增。
到最后就把基准数和第i个数字交换
而poj 2388的题意是给定个奇数,求中位数,用快速排序的方法就是
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std;
const int N=100005;
typedef long long ll ;
int date[N];
#define swap(a,b) {int t=a;a=b;b=t;}
int partition(int l,int r)
{
int i=l;
int t=date[r];
for(int j=l;j<r;j++)
{
if(date[j]<t)
{
swap(date[j],date[i]);
i++;
}
}
swap(date[i],date[r]);
return i;
}
void quicksort(int l,int r)
{
if(l<r)
{
int i=partition(l,r);
quicksort(l,i-1);
quicksort(i+1,r);
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>date[i];
}
quicksort(1,n);
for(int i=1;i<=n;i++)
{
cout<<date[i];
}
return 0;
}