IT技术 | 让程序员抓狂的排序算法教学视频

点击「箭头所指处」可快速关注传智特刊微信号: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. 点击下方“阅读原文”。

时间: 2024-08-26 06:29:11

IT技术 | 让程序员抓狂的排序算法教学视频的相关文章

让程序员抓狂的排序算法教学视频

罗马尼亚是一个爱跳舞的民族,如果你看过罗马尼亚老电影<奇普里安.博隆贝斯库>,那欢快悠扬的舞曲之炽热呵,非把你融化不可! 罗马尼亚人爱跳舞,不仅体现在电影和节日中,你会发现舞蹈无处不在,即使是大学里的计算机课程中的排序算法教学,也被用舞蹈的形式表现出来. 罗马尼亚Tirgu Mures地区的Sapientia大学就制作了一系列用民族舞蹈形式表现的各种排序算法的工作原理.下面就是这些视频. 舞跳的很好,但教学效果如何,我很难评判,至少让我对这几种排序算法的效率产生了严重的怀疑. 排序算法:选择排

程序员需要掌握的排序算法之希尔排序(最小增量排序)

希尔排序(最小增量排序) 基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. package sortalgorithm; public class PublicShellSort { static void shellSort() { int[] sortList = { 1, 3, 2, 4, 10, 7, 8, 9, 5, 6 }; int n = 1,len = s

计算机世界的道(C/ASM)生一(OS),一生二(API),二生万象(MFC/COM)——学包装技术的程序员将来会损失比较大,因为不了解本质,一旦包装过时就会被淘汰

道生一,一生二,二生万象.OO的思想就是抽象,万象归宗,化繁为简.99%的程序员使用OO,或者所谓的类库的目的就是好用,不必了解内部实现就可以直接达到所期望的结果.这时一种生产力的进步,一种流水线式半零件式的生产流程.程序员只是最后再流水线上拼接起来上个螺丝的工人而已(严格说来是码农).C++就是抽象万象的利器.用Windows举例子,从无到有这个关键的一步(所谓的底层),通产是C或者汇编.Windows源码大多是C/ASM编写,实现了硬件的抽象统一了抽象接口(中介有众厂商的驱动提供),然后从一

四海之内皆朋友-程序员之家微信群-欢迎喜欢讨论技术的程序员加入

最近有网友给我留言说想加我讨论技术,所以我建了一个微信群:程序员之家(名字随便取的,O(∩_∩)O) 欢迎喜欢讨论技术的程序员加入,(●'?'●) 微信群二维码(10月23日前有效) 原文地址:https://www.cnblogs.com/zqifa/p/cxyzj-wechat-group.html

为了赚钱而做技术的程序员,该如何选择后面的路?

1 本人男 29,二本计算机专业,大学期间没有规划,浑浑噩噩 2 来京后从事一线网站软件开发职业,从业已4年 2.1) 就目前而言,仍对个人职业规划不清晰,对本职工作做的不好,不热爱,写代码啊,看源码 啊,以及去技术网站和处理问题等都不热衷,也不兴奋,看到一大堆技术书籍心理第一感觉是双 手想往外推但为了这个职业继续做下去,做的更好逼迫自己要看书,或者看技术论坛,结果自然 而知,效率不高,收获甚少(目前做技术找不到快乐来源) 2.2) 对这份职业仅仅觉得自己学的这个专业,这专业工资相对高点而已,目

程序员被狂虐的17种姿势,简直不要太过分!

互联网行业都知道,PM(产品经理)强大的,就是程序员被虐:程序员强大的,就是PM被虐.程序员和PM的日常是相爱相杀,斗智斗勇,爱恨纠葛由来已久. 你=客户 服务员=客户经理+产品经理 大厨=码农 请自行转换, 代入以下场景-- 原始需求 你去饭店,坐下来. "服务员,给我来份宫保鸡丁!" "好嘞!" 中途需求变更 大厨做到一半. "服务员,菜里不要放肉." "不放肉怎么做啊?" "不放肉就行了,其它正常做,不就行了?

iOS 程序员必须掌握的核心算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?, 说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法.这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍.下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家.大家也可以留言区补充. 一.算法最最基础 1.时间复杂度 2.空间复杂度 一般最

程序员常用的10个算法

1.二分查找算法(非递归)  此篇写的是非递归算法,递归的在之前的查找算法中写过了. 1.1 算法的适用条件 二分查找只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在查找. 1.2算法的效率: 时间复杂度为O(log2 n) 实例:使用二分查找的非递归形式对数组{1 3 8 10  11 67 100}进行查找 public class BinarySearchNoRecur { public static void main(String[] args) { //测试 int

互联网公司的产品经理是如何让程序猿抓狂的

随便写写,就当吐槽和搞笑吧 1 产品经理:就是改个界面嘛,应该很快的哦! (程序猿:你行你来改啊!) 2 产品经理:这个功能我们公司的某某产品已经有了,搬过来就好了,很快的啦! (程序猿:快你妹啊,架构和底层类都不一样,好吗?界面风格和现有的也不搭啊!) 3 产品经理:(to iOS客户端开发)做成和Android一样就好啦 (程序猿:和Android一样是什么样......) 4 产品经理:和微信一样...和淘宝一样...和某某产品一样.... (程序猿:..... ) 5 产品经理:其他组已