[讨论] 程序员的艺术:排序算法舞蹈(转)

白丁   2014-11-22 14:00 楼主
1. 冒泡排序  冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第 1 个和第 2 个数,将小数放前,大数放后。然后比较第 2 个数和第 3 个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第 2 个数和第 3 个数的交换,使得第 1 个数不再小于第 2 个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。


2. 希尔排序
  先取一个小于n的整数 d1 作为第一个增量,把文件的全部记录分成(n除以 d1)个组。所有距离为 d1 的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量 d2
  该方法实质上是一种分组插入方法。

3. 选择排序
  每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。



4. 插入排序
  有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置



 5. 快速排序
  快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare 在 1962 年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

 6. 归并排序
  归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

training

回复评论 (9)

这个帖子应该有一个对应的视频吧
怎么看不到
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2014-11-22 15:41
引用: chenzhufly 发表于 2014-11-22 15:41
这个帖子应该有一个对应的视频吧
怎么看不到

有6个对应的视频都在啊
training
点赞  2014-11-22 16:24
给力啊
I like you, but just like you ! 纵然万劫不复,纵然相思入骨, 我也待你眉眼如初,岁月如故!
点赞  2014-11-22 16:33
难道是我浏览器的问题?一个都看不到
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2014-11-22 17:17
引用: chenzhufly 发表于 2014-11-22 17:17
难道是我浏览器的问题?一个都看不到

我这强制刷新看了下,确实有啊,是不是你的浏览器原因就不知道了, 换个浏览器试一下

training
点赞  2014-11-22 18:18
收藏了,好东西啊
点赞  2014-11-27 08:37
这是个好贴,可以加深映像...以前每次都得翻书....
where there is wade,there is a way...
点赞  2014-11-27 09:30
这个太形象了
点赞  2014-12-1 17:12
阔以阔以,我还不会这个 0217 本帖最后由 辛昕 于 2017-11-14 10:24 编辑
强者为尊,弱者,死无葬身之地
点赞  2017-11-13 18:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复