【发布时间】:2016-12-18 17:17:30
【问题描述】:
关于引用 Sedgewick 教授的插入排序 lecture,
我知道了,
Proposition:要对具有不同键的随机排序数组进行排序,插入排序平均使用 ~(1/4 )N^2 次比较和 ~(1/4 )N^2 次交换。
我也知道了,
Best case - 如果数组是升序的,插入排序进行 N-1 次比较和零次交换
如果我分析伪代码,
int n = array.length;
for(int i=0; i < n; i++){
for(int j=i; j>0; j--){
if(less(a[j], a[j-1]))
swap(array, j, j-1);
else
break; // Is N^2/4 due to break statement?
}
}
问题:
所以,
由于break 声明避免进一步比较,插入排序在平均情况下执行 (N^2)/4 次比较,在最佳情况下执行 N-1 次比较。
我的理解正确吗?
【问题讨论】:
标签: algorithm sorting insertion-sort