1.影响内部排序时间效率的是移动和比较的次数,影响外部排序时间效率的是i/o次数。
2.归并的躺数越少,读写磁盘的次数就越少,归并的躺数=
第一:k为归并路数,增大k,可以降低躺数,减少io次数
第二:r为初始归并段的个数,减少r,可以降低躺数,减少io次数
- 归并路数尽可能地增大
可是归并路数一旦增大,内部比较的压力就会变大,内部比较效率降低。那么,增大归并路数而提高的时间效率就被内部排序给抵消了。那怎么办呢?有没有可能使得内部排序效率不受归并路数增加的影响呢?这个办法就是“败者树”,用败者树的方法挑选出最小值。
m路归并,不使用败者树,要比较m-1次,使用败者树,只需要比较log2m次,总比较次数为(n-1)log2r,与m无关