博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序
阅读量:7095 次
发布时间:2019-06-28

本文共 1190 字,大约阅读时间需要 3 分钟。

快速排序是对冒泡排序的一种改进。它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
       假设待排序的序列为{a[L],a[L+1],a[L+2],……,a[R]},首先任意选取一个记录(通常可选中间一个记作为枢轴或支点),然后重新排列其余记录,将所有关键字小于它的记录都放在左子序列中,所有关键字大于它的记录都放在右子序列中。由此可以将该“支点”记录所在的位置mid作分界线,将序列分割成两个子序列和。这个过程称作一趟快速排序(或一次划分)。
        一趟快速排序的具体做法是:附设两个指针i和j,它们的初值分别为L和R,设枢轴记录取mid,则首先从j所指位置起向前搜索找到第一个关键字小于的mid的记录,然后从i所指位置起向后搜索,找到第一个关键字大于mid的记录,将它们互相交换,重复这两步直至i>j为止。
       快速排序的时间的复杂性是O(nlog2n),速度快,但它是不稳定的排序方法。就平均时间而言,快速排序是目前被认为是最好的一种内部排序方法
       由以上讨论可知,从时间上看,快速排序的平均性能优于前面讨论过的各种排序方法,但快速排序需一个栈空间来实现递归。若每一趟排序都将记录序列均匀地分割成长度相接近的两个子序列,则栈的最大深度为log(n+1)。
1 #include
2 #include
3 using namespace std; 4 int a[10001]; 5 6 int n; 7 void qsort(int l,int r) 8 { 9 int i=l;10 int j=r;11 int mid=a[(l+r)/2];12 do13 {14 while(a[i]
<=j)15 {16 i++;17 }18 while(a[j]>mid&&i<=j)19 j--;20 if(i<=j)21 {22 swap(a[i],a[j]);23 i++;24 j--;25 }26 }while(i<=j);27 if(l
>n;36 for(int i=0;i
>a[i];39 }40 qsort(0,n-1);41 for(int i=0;i

 

 

转载地址:http://saxql.baihongyu.com/

你可能感兴趣的文章
《C++面向对象高效编程(第2版)》——3.7 编译器如何实现const 成员函数
查看>>
《iOS 8应用开发入门经典(第6版)》——第2章,第2.4节小结
查看>>
《树莓派实战秘籍》——2.2 技巧22构建一个定制内核
查看>>
MySQL DBA 面试全揭秘
查看>>
sicp 4.3.1小节两题
查看>>
如何修改 Linux 的 GRUB 启动背景
查看>>
《大数据导论》一第2章 采用大数据的商业动机与驱动
查看>>
《21天学通C语言(第6版•修订版)》一1.4 程序开发周期
查看>>
《Visual Basic 2012入门经典》---- 2.5 使用“Properties”窗口设置对象属性
查看>>
android sdutio常用快捷键
查看>>
arcgis catalog 连接sde时出现 Target state not found in the STATES table 错误
查看>>
Spark机器学习7·降维模型(scala&python)
查看>>
架构师速成4.3-幼儿园要学会查找资料
查看>>
PostgreSQL 10.0 preview 功能增强 - 支持EUI-64格式MAC地址类型
查看>>
没有时间看MOOC怎么办?
查看>>
Redesign Your App for iOS 7 之 页面布局【转】
查看>>
由安装两块网卡的linux系统中引起网络不通想到的
查看>>
连接 0.0.0.0/32 发生了什么
查看>>
DJANGO:根据不同的环境,配置不同的SETTINGS文件,读取不同的DB,JENKINS,SALT配置
查看>>
实战:nginx作为web服务程序提供者条件下安装discuz
查看>>