求中点
L+R,可能溢出
除以2,等同于右移一位
递归、递归的时间复杂度
母问题的规模
子问题的规模,且都相等
调用次数
不用展开看,就看一层。
归并排序
时间复杂度降低的原因:没有浪费比较。比如选择排序,第一轮选择最小的,第二轮选择次小的,浪费了大量的比较。而归并排序,排好序后,进行更大的融合。
归并排序的扩展
小和问题:
等同于,第一个数1,有4个数比1大,所以产生4个1。以此类推。
利用归并排序,一边排序,一边计算。直到排好序,计算出结果。
左框的1,右框有7个数比1大,所以产生7个1的小和。7个,不是比出来的,是直接计算数组长度得来的。所以时间复杂度降低了。
注意:小和问题,左右框指针的数相等时,需要先拷贝右框的数。
逆序对
左侧比所有的右侧大的对
快排
问题一
小于等于区、指针
小于等于区在向右不断扩大
问题二
快排,首先随机选一个数,和最后一个位置做交换。然后利用荷兰国旗问题二排序。