插入排序
书上说的很好,用打牌作比方。就是一边是排好序的,剩下的是待排序的,每次取一个待排序的元素,找到按序的位置,插入已排好序的部分中。元素取完也就结束了。复杂度O(n^2)。
代码:
合并排序
合并排序是一种分治法,实现上用了递归结构。过程是:先将待排序的元素分为两部分,一般是对等长度的两部分,称为左右L、R,先分别将L,R进行合并排序,然后将排序好的L、R合并在一起,则所有元素都有序。复杂度O(nlgn)。
代码
合并排序的扩展应用
对合并排序稍作一些改动,可以以O(nlgn)的复杂度实现其他功能。
思考题2.3.7
思路:
I 对集合S中的元素进行排序,选择复杂度为O(nlgn)的排序算法,这里是合并排序
II 从两头开始遍历排序后S的元素,下标分别为i、j,若S[i]+S[j]==x,返回;若S[i]+S[j]>x,j--;若S[i]+S[j]<x,i++
代码
练习题2-4
逆序对问题,可以在合并的时候统计有多少逆序对。
代码