?
?
?图是借的别人的,他的排序是以右边第一个为基数,而我下面的程序是以左边第一个作为开始时候的基数。不过效果一样。
//快速排序 #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; }
?
初入算法!
原文:http://qq-24665727.iteye.com/blog/2299170