排序算法经常被用来考察一个人的基础能力。因此,对学过的排序算法进行总结,梳理,教材参照网易云课堂里面的浙大开设的数据结构课程里讲到的排序的内容,附上链接:http://mooc.study.163.com/learn/ZJU-1000033001?tid=1000044001#/learn/content?type=detail&id=1000112012&cid=100015100,在此感谢。如有错误,敬请指正。——2015.6.30
几个会用到的概念:
稳定性:任意两个相等的数据,排序前后的相对位置不发生改变。
- 冒泡排序
思想:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
伪代码:
解释的已经很清楚了,其中注意,flag用来区分,如果本轮没有发生交换,那么说明已经排好序了,可以结束了。
时间复杂度:顺序T=O(N),逆序T=O(N2 )
稳定性:稳定
小测试1:对于7个数进行冒泡排序,最坏情况下需要进行的比较次数为(答案是21)。
- 插入排序
思想:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
伪代码: