算法class11 排序算法-快速排序

Posted 计算机算法与模型

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法class11 排序算法-快速排序相关的知识,希望对你有一定的参考价值。

基本思想:

选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序流程:
(1) 从数列选取中间挑出一个基准值。
(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。
(3) 递归地把"基准值前面的子数列"和"基准值后面的子数列"进行排序。


下面以数列a={20,40,32,67,40,20,89,300,400,15}为例,演示它的快速排序过程(如下图)。

#include<iostream>
using namespace std;/** *题目:排序算法-快速排序c++代码 *author:wyyhzc */
void qsort(int a[],int l,int r){ int i,j,mid,p; i=l;j=r; mid=a[(l+r)/2];
do{ while(a[i]<mid)i++; while(a[j]>mid)j--; if(i<=j){ p=a[i]; a[i]=a[j]; a[j]=p; i++;j--; }

}while(i<=j);
if(l<j)qsort(a,l,j); if(i<r)qsort(a,i,r);


}
int main(){ int n=10; int a[]={20,40,32,67,40,20,89,300,400,15}; cout<<"排序前的数组:"<<endl; for(int i=0;i<n;i++){ cout<<a[i]<<" "; } cout<<endl;
qsort(a,0,10);
for(int i=0;i<n;i++){ cout<<a[i]<<" "; } cout<<endl;

return 0;}
排序前的数组:20 40 32 67 40 20 89 300 400 1515 20 20 32 40 40 67 89 300 400

你若喜欢,点个在看 

以上是关于算法class11 排序算法-快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

结构-行为-样式-Js排序算法之 快速排序

11.经典O(n2)比较型排序算法

11.经典O(n2)比较型排序算法

11.经典O(n2)比较型排序算法

11.经典O(n2)比较型排序算法