图是借的别人的,他的排序是以右边第一个为基数,而我下面的程序是以左边第一个作为开始时候的基数。不过效果一样。
//快速排序
#include <iostream>
using namespace std;
#define n 10
int Division(int a[],int left,int right){//分割函数
int base=a[left]; //取左侧元素为基准元素
while(left<right){
while(left<right&&a[right]>base) //从右向左找第一个比基准小的元素
--right;
a[left]=a[right];//将比基数小的数移到左边
while(left<right&&a[left]<base)从左向右找第一个比基准大的元素
++left;
a[right]=a[left];//将比基数大的数移到右边
}
a[left]=base;
return left;
}
//快速排序
void QuickSort(int a[],int left,int right){
int i,j;
if(left<right){ //左侧序号小于右边的序号
i=Division(a,left,right); //分割
QuickSort(a,left,i-1);//左侧进行递归调用
QuickSort(a,i+1,right);//右侧进行递归调用
}
}
int main()
{
int i,a[n];
for(i=0;i<n;i++){ //输入数组(或者自己写随机生成函数)
cin>>a[i];
}
QuickSort(a,0,n-1);//调用快速排序方法
cout<<"排序后:"<<endl;
for(i=0;i<n;i++){ //输出排序完成的结果
cout<<a[i]<<" ";
}
return 0;
}
初入算法!