这是我在Wikipedia网站上发现的一个问题(我想很好地学习排序算法)。无论如何,这是一个问题 - 你能告诉我如何展示它吗?
练习:显示算法插入排序(A)在时间O(n + I)中运行,因为I是数组A中的反转次数。
答案 0 :(得分:4)
查看this page的Implementation
和Analysis
部分。
考虑那里提出的算法:
private static void insertionsort()
{
int i, j, t;
for (i=1; i<n; i++)
{
j=i;
t=a[j];
while (j>0 && a[j-1]>t)
{
a[j]=a[j-1];
j--;
}
a[j]=t;
}
}
请注意,while循环运行v[i]
次迭代,其中v[i]
是元素i
引起的反转次数。这应该使证据非常容易理解。