[英]Insertion Sort Algorithm in C
我对插入排序的以下代码有疑问:
void insertion(Item a[], int ell, int r)
{
int i;
for (i=ell+1; i<=r; i++)
compexch(a[ell], a[i]);
{
for (i=ell+2; i<=r; i++)
{
int j=i;
Item v=a[i];
while(less (v, a[j-1]))
{
a[j]=a[j-1];
j--;
}
a[j]=v;
}
}
}
好的,所以我的问题是关于while循环部分 - 我看到j递减了,想知道当j = 0和a [-1]时会发生什么。 我不明白我们如何允许负面索引 - 如果我们比较的信息发生了变化并且while循环继续运行会怎么样? 谢谢。
我假设compexch(x,y)
做了if (less(y,x)) { Item t = x; x=y; y=t }
if (less(y,x)) { Item t = x; x=y; y=t }
if (less(y,x)) { Item t = x; x=y; y=t }
。 因此,在第一个for
循环完成之后a[ell]
包含a[ell+1],...,a[r]
中的最少Item
。 现在j
用值i
初始化,它至少是ell+2
,所以我们在进入while
循环时有j > ell
。 如果while
循环没有尽快终止,我们最终会得到j == ell
。 由于a[ell]
已经被设置为范围中的最小元素,因此less(v, a[ell])
必然返回false,然后循环将终止。
所以j
永远不会减少到小于ell
的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.