mydjm

 

快速排序

 1 void qs(int s,int e)   
2 {
3 int x=a[s],l=s,r=e;//以第一个数为参照做比较
4 if(l>=r)return;
5 while(l<r)
6 {
7 while(l<r&&a[r]>=x)
8 r--; //不小于分界值的留在右边,遇到小于的停止
9 a[l]=a[r];
10 while(l<r&&a[l]<=x)
11 l++; //小于分界值的留在左边,遇到不小于的停止
12 a[r]=a[l];
13 }
14 a[r]=x;
15 qs(s,r-1);
16 qs(r+1,e);//递归
17 }
18 void main()
19 {
20 int i,num;
21 cout<<"请输入排序数的个数"<<endl;
22 cin>>num;
23 cout<<"请输入"<<num<<"个数:"<<endl;
24 for(i=0;i<num;i++)
25 cin>>a[i]; //输入数组元素
26 qs(0,num-1); //执行排序函数
27 for(i=0;i<num;i++) //输出排序后结果
28 cout<<a[i]<<' ';
29 system("pause");
30 }

运行截图:

跟算法导论里的不太一样,但中心思想是一样的,就是把数组分成两部分,一部分大于等于key,另一部分小于key。

我觉得这个做法比较好理解也比较简单。

posted on 2012-03-22 19:52  mydjm  阅读(132)  评论(0编辑  收藏  举报

导航