点击「箭头所指处」可快速关注传智特刊微信号:CZTEKAN

原文地址:http://mp.weixin.qq.com/s?__biz=MjM5OTM4NDMyMg==&mid=200568203&idx=2&sn=cddc0bf4f5512c04e9c4de2705e2e68e#rd

罗马尼亚是一个爱跳舞的民族,如果你看过罗马尼亚老电影《奇普里安.博隆贝斯库》,那欢快悠扬的舞曲之炽热呵,非把你融化不可!

罗马尼亚人爱跳舞,不仅体现在电影和节日中,你会发现舞蹈无处不在,即使是大学里的计算机课程中的排序算法教学,也被用舞蹈的形式表现出来。

罗马尼亚Tirgu Mures地区的Sapientia大学就制作了一系列用民族舞蹈形式表现的各种排序算法的工作原理。下面就是这些视频。

舞跳的很好,但教学效果如何,我很难评判,至少让我对这几种排序算法的效率产生了严重的怀疑。

1 排序算法:选择排序法

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

2 排序算法:希尔排序法

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

1.插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率;
2.但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位。

3 排序算法:冒泡排序法

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序对n个项目需要O(n^2)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实作的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。

4 排序算法:快速排序法

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

5 排序算法:归并排序法

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

6 排序算法:插入排序法

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

对于这篇文章,你的反应是什么? 1.俺的神啊 2.赞一个 3.飘过 4.强 5.很实用 6.笑死了 7.垃圾 8.好文 9.敬佩 (只要回复就可以得到美女小编我的一对一答复哦!)

传智特刊

1. 回文章顶部,点「传智特刊」进行订阅;

2. 搜微信号:CZTEKAN (←长按复制);

3. 点击下方“阅读原文”。

最新文章

  1. 可拖动的DIV
  2. IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
  3. rman恢复误删除的一张表(不完全恢复)
  4. js 读写cookie。不同路径会储存各自的cookie。而 在v.net环境下读写是在 / 根目录。
  5. dede标签调用
  6. Win7+VMware Workstation环境下的CentOS-Linux网络连接设置
  7. iOS 通知中心 NSNotificationCenter
  8. Android执行shell命令
  9. javescript扩展方法
  10. libthrift0.9.0解析(三)之TProtocol&TTransport
  11. java 基于JDK中的源码总结下String二
  12. Duanxx的STM32学习:STM32F103中等容量的功能和外设
  13. Python打包分发工具setuptools
  14. 查看文件状态与跟踪新文件(git status/add)
  15. RSA 前段加密 java 后台解密 已调试通过
  16. Redis学习笔记(3)-XShell连接CentOSMini,并安装Redis
  17. [网络流]Drainage Ditches(草地排水)
  18. Intellij Idea 使用时总是打开上次的项目
  19. Red Hat Enterprise Linux AS release 4 yum源
  20. cocos2d-x 音乐与音效

热门文章

  1. Android自定义View——自定义搜索框(SearchView)
  2. Eight(South Central USA 1998)(八数码) 分类: bfs 2015-07-05 22:34 1人阅读 评论(0) 收藏
  3. hdu2208之搜索
  4. PHP MySQL Where 子句 之Where
  5. 清除mac上安装软件的用户信息
  6. N种方法妙讲LIS算法
  7. 一笔画问题(floyd+oular+dfs)
  8. ThreadPool(线程池) in .Net
  9. struts2复习(五)拦截器总结
  10. 使用CSS达到阴阳八卦图等图形