算法class11 排序算法-快速排序
Posted 计算机算法与模型
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法class11 排序算法-快速排序相关的知识,希望对你有一定的参考价值。
基本思想:
选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序流程:
(1) 从数列选取中间挑出一个基准值。
(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。
(3) 递归地把"基准值前面的子数列"和"基准值后面的子数列"进行排序。
下面以数列a={20,40,32,67,40,20,89,300,400,15}为例,演示它的快速排序过程(如下图)。
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 15
15 20 20 32 40 40 67 89 300 400
你若喜欢,点个在看
以上是关于算法class11 排序算法-快速排序的主要内容,如果未能解决你的问题,请参考以下文章