根据算法导论写的快速排序
算法导论上面说在选取基准元素是取得最后一个,我用的数据结构课本上面是取第一个;不过没有原理都是一样的;通过Qartion(int a[],int l,int r)函数将数组a中元素划分为三部分,比a[r]小的,比a[r]大的,a[r];www.zzzyk.com
最后返回基准元素所在的位置;
[cpp]
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
const int N=99;
int Qartion(int a[],int l,int r)
{
int tmp=a[r];
int i=l-1;
for(int j=l;j<=r-1;j++)
{
if(a[j]<=tmp)
{
i++;
swap(a[i],a[j]);
}
}
swap(a[i+1],a[r]);
return i+1;
}
void Qsort(int a[],int l,int r)
{
if(l<r)
{
int p=Qartion(a,l,r);
Qsort(a,l,p-1);
Qsort(a,p+1,r);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int a[100];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Qsort(a,0,n-1);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
作者:Java_beginer1
补充:软件开发 , C++ ,