a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 56|回复: 0

[程序员] 2012年软件水平考试程序员考点整理(5)

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
 9、内部排序: o* O# m9 n8 @' l) l
  考绩你对书本上的各类排序算法及其思惟以及其优错误谬误和机能指标(时刻复杂度)能否了如指掌。
2 O3 n. ~* b# r& @& d# l  排序体例分类有:插入、选择、交流、合并、计数等五种排序体例。% R' L- Q  R& W- F+ j/ t, X
  (1)插入排序中又可分为:直接插入、折半插入、2路插入(?)、希尔排序。这几种插入排序算法的最根柢的分歧点,说到底就是按照什么轨则寻找新元素的插入点。直接插入是依次寻找,折半插入是折半寻找,希尔排序,是经由过程节制每次介入排序的数的总规模“由小到大”的增量来实现排序效率提高的目的。
1 \# n$ L& X! R  (2)交流排序,又称冒泡排序,在交流排序的基本上改良又可以获得快速排序。快速排序的思惟,一语以敝之:用中心数将待排数据组一分为二。8 E8 x/ `& \) R% S
  (3)选择排序可以分为:简单选择、树选择、堆排序。选择排序相对于前面几种排序算法来说,难度大一点。这三种体例的分歧点是,按照什么轨则拔取最小的数。
1 z4 B$ z! B, N" ?1 B. i  简单选择,是经由过程简单的数组遍历方案确定最小数;
+ `% u$ v. ~- ]3 C9 U1 |$ c  树选择,是经由过程“锦标赛”近似的思惟,让两数对比,不竭裁减较大(小)者,最终选出最小(大)数;
& |( ^) H1 a" p, n7 V' E3 k+ v( p  S  而堆排序,是操作堆这种数据结构的性质,经由过程堆元素的删除、调整等一系列操作将最小数选出放在堆顶。堆排序中的堆成立、堆调整是主要考点。/ x% l* e3 q- h! L7 ~* M
  (4)合并排序,是经由过程“合并”这种操作完成排序的目的,既然是合并就必需是两者以上的数据集结才可能实现合并。所以,在合并排序中,关注最多的就是2路合并。算法思惟斗劲简单,有一点,要铭刻在心:合并排序是不变排序。
& q. X4 C: _' O. b& {* x/ k3 c  (5)基数排序,是一种很出格的排序体例,也恰是因为它的非凡,所以,基数排序就斗劲适合于一些出格的场所,好比扑克牌排序问题等。基数排序,又分为两种:多关头字的排序(扑克牌排序),链式排序(整数排序)。基数排序的焦点思惟也是操作“基数空间”这个概念将问题规模规范、变小,而且,在排序的过程中,只要按照基排的思惟,是不用进行关头字斗劲的,这样得出的最终序列就是一个有序序列。# m+ Z' t& ?; G% k7 u8 ~
  本章各类排序算法的思惟以及伪代码实现,及那时刻复杂度都是必需把握的。
- P2 A. O# ^+ N/ z! O6 \; s  //////////////////////////////////////////////不变性剖析////////////////////////////////////////////////9 n$ t: k, R' ^% Y' s# O* p
  排序算法的不变性,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置挨次和排序后它们两个的前后位置挨次不异。1 |3 p$ B9 `% l  d/ B" g1 b
  不变性的益处:若排序算法如不美观是不变的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结不美观可觉得第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位不异的元素其挨次再高位也不异时是不会改变的。此外,如不美观排序算法不变,对基于斗劲的排序算法而言,元素交换的次数可能会少一些(小我感受,没有证实)。5 \9 d* y( o, P$ M, @6 [
  剖析一下常见的排序算法的不变性,每个都给削发单的理由。
3 a3 _* s1 `( B+ @7 M  (1) 冒泡排序- L& E  {, f# T& ?! k- ?
  冒泡排序就是把小的元素往前调或者把大的元素往后调。斗劲是相邻的两个元素斗劲,交流也发生在这两个元素之间。所以,如不美观两个元素相等,我想你是不会再无聊地把他们俩交流一下的;如不美观两个相等的元素没有相邻,那么即使经由过程前面的两两交流把两个相邻起来,这时辰也不会交流,所以不异元素的前后挨次并没有改变,所以冒泡排序是一种不变排序算法。
( q- a6 P  A8 J. W  (2) 选择排序. Y3 m* w1 O& A- X7 H
  选择排序是给每个位制揭捉择当前元素最小的,好比给第一个位制揭捉择最小的,在残剩元素琅缦沔给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不悠揭捉择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如不美观当前元素比一个元素小,而该小的元素又呈此刻一个和当前元素相等的元素后面,那么交流后不变性就被破损了。斗劲拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交流,那么原序列中2个5的相对前后挨次就被破损了,所以选择排序不是一个不变的排序算法。
$ ~$ W8 d+ Y* t! a  (3) 插入排序
& a* B. q  K3 J+ f/ o+ p% J  插入排序是在一个已经有序的弁言列的基本上,一次插入一个元素。当然,刚起头这个有序的弁言列只有1个元素,就是第一个元素。斗劲是从有序序列的末尾起头,也就是想冲要入的元素和已经有序的最大者起头比起,如不美观比它大则直接插入在厥后面,否则一憧憬前找直到找到它该插入的位置。如不美观碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后挨次没有改变,从原无序序列出去的挨次就是排好序后的挨次,所以插入排序是不变的。- H0 J, I' _* }7 t  P$ s
  (4) 快速排序1 [( o* F$ p+ L1 v. k9 V
  快速排序有两个标的目的,左边的i下标一憧憬右走,当a  a[center_index]。如不美观i和j都走不动了,i j。交流a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交流的时辰,很有可能把前面的元素的不变性打乱,好比序列为 5 3 3 4 3 8 9 10 11,此刻中枢元素5和3(第5个元素,下标从1起头计)交流就会把元素3的不变性打乱,所以快速排序是一个不不变的排序算法,不不变发生在中枢元素和 a[j] 交流的时刻。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 16:19 , Processed in 0.386140 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表