∑(log2」+1) +2+2+3+…+3+ 2 +4+…+4+∵+k+…+k =(1+2+22+…+2k-)+(2+22+…+2)+ +(22+ +2k-1 +∴+2k-1 ∑∑2=∑2(1+2+…+2 i=1 k 1)k-i+1 2 ∑24-∑ i=1 =k·2k-(2k-1)=nlog2n-n+1≈nlog2n
k n n n n n k k i k k k i i k i k i k k i i k i i k i k i k j i j k k k k n i k 2 2 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 2 2 2 2 2 1 1 2 2 (2 1) log 1 log 2 (2 1) 2 2 2 2 (1 2 2 ) (2 2 ) 2 (1 2 2 2 ) (2 2 2 ) 4 4 log 1 1 2 2 3 3 3 1 2 0 1
n当n较大时,总关键码比较次数比直接插入 排序的最坏情况要好得多,但比其最好情况 要差。 在对象的初始排列已经按关键码排好序或接 近有序时,直接插入排序比对分插入排序执 行的关键码比较次数要少。对分插入排序的 对象移动次数与直接插入排序相同,依赖于 对象的初始排列。 对分插入排序是一个稳定的排序方法
链表插入排序 n链表插入排序的基本思想是:在每个对象的结 点中增加一个链接指针数据成员link 对于存放于数组中的一组对象11],12,…, vm,若v1,Ⅵ2],…,y1已经通过指针link, 按其关键码的大小,从小到大链接起来,现在 要插入v,i=2,3,,n,则必须在前面1个链 接起来的对象当中,循链顺序检测比较,找到 v引应插入(或链入)的位置,把v插入,并修改 相应的链接指针。这样就可得到v,V2],… v的一个通过链接指针排列好的链表 如此重复执行,直到把v叫也插入到链表中排好 序为止
2125 4925 16 08 2345 i=2司司■ current pre current pre i4c母母日目口 pre current
0 1 2 3 4 5 6 current pre i current pre i pre current i
2125 4925 16 08 2345 i=5 pre current i=6 pre current i 结果
0 1 2 3 4 5 6 pre current i pre current i