收藏 分享(赏)

【昊昊带你学】常见的几种排序2(qsort).doc

上传人:s36f12 文档编号:6612333 上传时间:2019-04-18 格式:DOC 页数:3 大小:21.02KB
下载 相关 举报
【昊昊带你学】常见的几种排序2(qsort).doc_第1页
第1页 / 共3页
【昊昊带你学】常见的几种排序2(qsort).doc_第2页
第2页 / 共3页
【昊昊带你学】常见的几种排序2(qsort).doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、Qsort 快排,顾名思义,它是排序算法,而且它快,是吧。那这个快从何说起呢?写到这我才发现,说前面几个算法的时候,对时效只字未提,0.0 证明昊昊的确是灰常不合格的程序猿。插入,选择,冒泡,bla bla我们把它们看做 O(n2)的算法,这里的这个 O 是个渐进记号,表示的是渐进上界,当然还有一种 ,它同时渐进地给出了函数的上界及下界。严谨的判断方法当然应该讲算法运行步数表示成一个跟输入规模 n 有关的函数。当然,精确地计算看起来很麻烦,当 n时,许多项可以忽略,再把系数啥的忽略了,就得到上面的 O()了(好像是这么回事,这就是我当初在概论里没说这事儿的原因,我自己也不是啥细节都清楚) 。而

2、 Qsort 的效率就要高很多,平均 O(nlogn)。不随机的情况下,最坏情况貌似也是 O(n2)。下面就进入正题:qsort!基本描述首先要说的是,快排也是基于分治思想的。它分为几个步骤,首先对要排序数组划分(先找出一个 pivot(不知道该肿么翻,总之是用来作为比较的标准) ,将比 pivot 小的挪到pivot 的一侧,其他到 pivot 的另一侧) 。然后再递归地用 qsort 来排序 pivot 两边的数组。边界可以设成一个数、两个数,也可以设成小于某个量的时候该用插入排序之类的,它们开销比较小,在小规模的时候不逊于快排。实现我们把分划的那一步单独拿出来,称作 PARTITION(

3、A, p, r),它返回的是 pivot 的坐标。假设我们已经完成了这个函数,我们来看一看快排要怎样完成工作,伪代码如下:QUICKSORT(A, p, r)If p= xIf I jThen exchange Ai AjElse return j这好像也是最初的那个版本 0.0。首先 X 是 pivot,毫无疑问。然后左右指针分别是 I j。左右指针分别向中间扫,j 扫到一个小于等于 X 的停下,i 扫到一个大于等于 X 的停下。俩指针交换一下继续,知道指针交叉,返回 j。举例(PARTITION1)1) 2 8 7 1 3 5 6 |4I p,j r2) 2| 8 7 1 3 5 6 |4

4、I,p j r3) 2| 8| 7 1 3 5 6 |4I,p j r4) 2| 8 7| 1 3 5 6 |4I,p j r5) 2 1| 7 8| 3 5 6 |4p i j r6) 2 1 3| 8 7| 5 6 |4p i j r7) 2 1 3| 8 7 5| 6 |4p i j r8) 2 1 3| 8 7 5 6| 4p i r9) 2 1 3| 4| 7 5 6 8p i r好吧,我只能尽力做成这样了 0.0 我觉得大家应该能看懂吧。每个步骤包含两行,第一行是当前数组状态,第二行是各个指针状态。 ”|”将数组分割成若干段。最右边的”|” 表示j 只能扫到 6,而不会扫到最右的数

5、。然后最左面的”|”跟着 i,意味着它左边的数都小于4。中间的”|”跟着 j,就是说它左边的都已经分划好了。9 )处,4 已经找到正确位置,左”|”的左侧都小于 4,右”|” 的右侧都大于 4。此时就可以返回 i+1 了,正好是 4(pivot)的位置。快排应该算是一个非常重要的算法,估计咱们考试也会考到吧大家还是自己亲手敲一敲代码体会体会吧。哈哈http:/www.cs.usfca.edu/galles/visualization/ComparisonSort.html之前提到过的,这里有可视化的快排。主页里分享了形象的快排视频。大家可以去看一下,主页菌感觉非常棒。新学期开始了,主页菌祝大家算法数据结构能那个好成绩,嘎嘎

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报