一分钟算法——插入排序
Posted 无忧公主的数学时间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一分钟算法——插入排序相关的知识,希望对你有一定的参考价值。
插入排序
我们还是来看前几天举的那个例子吧,就是给10名学生的成绩排序。最初就只有1名学生的成绩,然后又多来了1名学生,就有2名学生的成绩了。把新来的那个成绩和一开始的那1个成绩进行比较,因为题目要求是从大到小排序的,所以如果第2个的成绩大,那就放在前面;如果小,那就放在后面。接下来我们来看第3名学生,用类似的方法,经过和之前的2名学生的成绩的比较,一定能够找到一个合适的位置去放置第3名学生的成绩(在这个位置的前一个比其大,后一个则比其小)。我们讲讲实际的操作,先假设第1名学生的成绩是100,第2名学生的成绩是98,那么第2名学生来了之后,我们得出的排序结果是100、98。随后我们得知第3名学生的成绩是99分,那么第3名学生在这前、中、后三个位置当中,中间的位置是合适的。因此现在的排序结果是100、99、98。之后都可以这样做,直到排完10名学生。
下面是一个动画,表示插入排序的具体实现过程。
再来计算复杂度,不说空间的了,直接说时间复杂度。设有n名学生,那么第1名学生的次数是0,第2名学生可选位置有两种,比较次数是1。第3名学生可选位置有三种,比较次数是2。以此类推,最后第n名学生有n种情况,最坏是比较n-1次。还有,如果一个新的数要插在最前面的话,就需要将原来所有的往后移动一格。在最坏情况下,总比较次数为(n^2)/2,总移动次数为(n^2)/2。在最优情况下(一开始就满足条件,从小到大或从大到小),比较次数为n-1,移动次数为0。在所有随机产生的数据的情况下,这个算法平均要(n^2)/4次比较,(n^2)/4次移动。所以,我们说它的时间复杂度是O(n^2)。
你有没有想过插入排序的应用呢?别以为插入排序耗时,人们就不常用它。在打扑克牌时,你是不是用插入排序理牌的?这种算法很方便,很容易理解。打麻将也是类似,你会发现在日常生活中,插入排序还有不少应用。
以上是关于一分钟算法——插入排序的主要内容,如果未能解决你的问题,请参考以下文章