欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    快速排列算法思想.docx

    • 资源ID:30139164       资源大小:21.43KB        全文页数:11页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    快速排列算法思想.docx

    1、快速排列算法思想快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 假设要排序的数组是A1AN,首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;2)以第一个数组元素作为关键数据,赋值给X,即X:=A1;3)、从J开始向前搜

    2、索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;5)、重复第3、4步,直到I=J;例如:待排序的数组A的值分别是:(初始关键数据X:=49) A1 A2 A3 A4 A5 A6 A7: 49 38 65 97 76 13 27进行第一次交换后: 27 38 65 97 76 13 49 ( 按照算法的第三步从后面开始找进行第二次交换后: 27 38 49 97 76 13 65 ( 按照算法的第四步从前面开始找X的值,6549,两者交换,此时I:=3 )进行第三次交换后: 27

    3、38 13 97 76 49 65( 按照算法的第五步将又一次执行算法的第三步从后开始找进行第四次交换后: 27 38 13 49 76 97 65( 按照算法的第四步从前面开始找大于X的值,9749,两者交换,此时J:=4 ) 此时再执行第三不的时候就发现I=J,从而结束一躺快速排序,那么经过一躺快速排序之后的结果是:27 38 13 49 76 97 65,即所以大于49的数全部在49的后面,所以小于49的数全部在49的前面。 快速排序就是递归调用此过程在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有

    4、序的序列,根据这种思想对于上述数组A的快速排序的全过程如图6所示:初始状态 49 38 65 97 76 13 27进行一次快速排序之后划分为 27 38 13 49 76 97 65分别对前后两部分进行快速排序 13 27 38 结束 结束 49 65 76 97 49 65 结束 结束 图6 快速排序全过程1)、设有N(假设N=10)个数,存放在S数组中;2)、在S1。N中任取一个元素作为比较基准,例如取T=S1,起目的就是在定出T应在排序结果中的位置K,这个K的位置在:S1。K-1=SKt) and (jI) do Begin k:=k+1; j:=j-1 end; if Ij then

    5、begin sI:=sj;I:=I+1;l:=l+1; while (sIt) and (Ij) do begin k:=k+1; I:=I+1 End; If Ij thenbegin Sj:=sI;j:=j-1;l:=l+1; End;End;Until I=j;SI:=t;I:=I+1;j:=j-1;l:=l+1;If lxj then qsort(lx,j);If Irx then qsort(I,rx)End;过程qsort结束BeginWriteln(input 10 integer num:);For m:=1 to n do read(sm);K:=0;l:=0;Qsort(l

    6、,n);Writeln(排序后结果是:);For m:=1 to n do write(sm:4)End.数据结构一、插入排序(Insertion Sort)1. 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。2. 排序过程: 【示例】:初始关键字 49 38 65 97 76 13 27 49J=2(38) 38 49 65 97 76 13 27 49J=3(65) 38 49 65 97 76 13 27 49J=4(97) 38 49 65 97 76 13 27 49J=5(76) 38 49 65 7

    7、6 97 13 27 49J=6(13) 13 38 49 65 76 97 27 49J=7(27) 13 27 38 49 65 76 97 49J=8(49) 13 27 38 49 49 65 76 97 Procedure InsertSort(Var R : FileType);/对R1.N按递增序进行插入排序, R0是监视哨/Beginfor I := 2 To N Do /依次插入R2,.,Rn/beginR0 := RI; J := I - 1;While R0 RJ Do /查找RI的插入位置/beginRJ 1 := RJ; /将大于RI的元素后移/J := J - 1e

    8、ndRJ 1 := R0 ; /插入RI /endEnd; /InsertSort /二、选择排序1. 基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。2. 排序过程:【示例】:初始关键字 49 38 65 97 76 13 27 49第一趟排序后 13 38 65 97 76 49 27 49第二趟排序后 13 27 65 97 76 49 38 49第三趟排序后 13 27 38 97 76 49 65 49第四趟排序后 13 27 38 49 49 97 65 76第五趟排序后 13 27 38 49 49 9

    9、7 97 76第六趟排序后 13 27 38 49 49 76 76 97第七趟排序后 13 27 38 49 49 76 76 97最后排序结果 13 27 38 49 49 76 76 97Procedure SelectSort(Var R : FileType); /对R1.N进行直接选择排序 /Beginfor I := 1 To N - 1 Do /做N - 1趟选择排序/beginK := I;For J := I 1 To N Do /在当前无序区RI.N中选最小的元素RK/beginIf RJ RK Then K := Jend;If K I Then /交换RI和RK /b

    10、egin Temp := RI; RI := RK; RK := Temp; end;endEnd; /SelectSort /三、冒泡排序(BubbleSort)1. 基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。2. 排序过程:设想被排序的数组R1.N垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上漂浮,如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。【示例】:49 13 13 13 13 13 13 13 38 49 27 27

    11、 27 27 27 2765 38 49 38 38 38 38 3897 65 38 49 49 49 49 4976 97 65 49 49 49 49 4913 76 97 65 65 65 65 6527 27 76 97 76 76 76 7649 49 49 76 97 97 97 97Procedure BubbleSort(Var R : FileType) /从下往上扫描的起泡排序/BeginFor I := 1 To N-1 Do /做N-1趟排序/beginNoSwap := True; /置未排序的标志/For J := N - 1 DownTo 1 Do /从底部往上

    12、扫描/beginIf RJ 1= X) And (I J) DobeginJ := J - 1 /从右向左扫描,查找第1个小于 X的元素/If I J Then /已找到RJ X/beginRI := RJ; /相当于交换RI和RJ/I := I 1end;While (RI = X) And (I J) DoI := I 1 /从左向右扫描,查找第1个大于 X的元素/end;If I X /begin RJ := RI; /相当于交换RI和RJ/J := J - 1endUntil I = J;RI := X /基准X已被最终定位/End; /Parttion /Procedure Quic

    13、kSort(Var R :FileType; S,T: Integer); /对RS.T快速排序/BeginIf S T Then /当RS.T为空或只有一个元素是无需排序/beginPartion(R, S, T, I); /对RS.T做划分/QuickSort(R, S, I-1);/递归处理左区间RS,I-1/QuickSort(R, I 1,T);/递归处理右区间RI 1.T /end;End; /QuickSort/五、堆排序(Heap Sort)1. 基本思想:堆排序是一树形选择排序,在排序过程中,将R1.N看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间

    14、的内在关系来选择最小的元素。2. 堆的定义: N个元素的序列K1,K2,K3,.,Kn.称为堆,当且仅当该序列满足特性:KiK2i Ki K2i 1(1 I N/2)堆实质上是满足如下性质的完全二叉树:树中任一非叶子结点的关键字均大于等于其孩子结点的关键字。例如序列10,15,56,25,30,70就是一个堆,它对应的完全二叉树如上图所示。这种堆中根结点(称为堆顶)的关键字最小,我们把它称为小根堆。反之,若完全二叉树中任一非叶子结点的关键字均大于等于其孩子的关键字,则称之为大根堆。3. 排序过程:堆排序正是利用小根堆(或大根堆)来选取当前无序区中关键字小(或最大)的记录实现排序的。我们不妨利用

    15、大根堆来排序。每一趟排序的基本操作是:将当前无序区调整为一个大根堆,选取关键字最大的堆顶记录,将它和无序区中的最后一个记录交换。这样,正好和直接选择排序相反,有序区是在原记录区的尾部形成并逐步向前扩大到整个记录区。【示例】:对关键字序列42,13,91,23,24,16,05,88建堆 Procedure Sift(Var R :FileType; I, M : Integer);/在数组RI.M中调用RI,使得以它为完全二叉树构成堆。事先已知其左、右子树(2I 1 =M时)均是堆/BeginX := RI; J := 2*I; /若J =M, RJ是RI的左孩子/While J = M Do

    16、 /若当前被调整结点RI有左孩子RJ/beginIf (J M) And RJ.Key RJ 1.Key ThenJ := J 1 /令J指向关键字较大的右孩子/J指向RI的左、右孩子中关键字较大者/If X.Key RJ.Key Then /孩子结点关键字较大/beginRI := RJ; /将RJ换到双亲位置上/I := J ; J := 2*I /继续以RJ为当前被调整结点往下层调整/end;ElseExit/调整完毕,退出循环/endRI := X;/将最初被调整的结点放入正确位置/End;/Sift/Procedure HeapSort(Var R : FileType); /对R1

    17、.N进行堆排序/BeginFor I := N Div Downto 1 Do /建立初始堆/Sift(R, I , N)For I := N Downto 2 do /进行N-1趟排序/beginT := R1; R1 := RI; RI := T;/将当前堆顶记录和堆中最后一个记录交换/Sift(R, 1, I-1) /将R1.I-1重成堆/endEnd; /HeapSort/六、几种排序算法的比较和选择 1. 选取排序方法需要考虑的因素:(1) 待排序的元素数目n;(2) 元素本身信息量的大小;(3) 关键字的结构及其分布情况;(4) 语言工具的条件,辅助空间的大小等。2. 小结:(1)

    18、 若n较小(n = 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。(2) 若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜。(3) 若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。 快速排序是目前基于比较的内部排序法中被认为是最好的方法。(4) 在基于比较排序方法中,每次比较两个关键字的大小之后,仅仅出现两种可能的转移,因此可以用一棵二叉树来描述比较判定过程,由此可以证明:当文件的n个关键字随机分布时,任何借助于比较的排序算法,至少需要O(nlog2n)的时间。(5) 当记录本身信息量较大时,为避免耗费大量时间移动记录,可以用链表作为存储结构。


    注意事项

    本文(快速排列算法思想.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开