C中的插入排序算法
发布时间:2020-12-16 07:15:21 所属栏目:百科 来源:网络整理
导读:我对插入排序的以下代码有疑问: 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; } } } 好的
我对插入排序的以下代码有疑问:
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}.因此,在第一个for循环完成之后,[ell]包含[ell 1],…,a [r]中的最少Item.现在j用值i初始化,其至少为2,因此我们有j> 1.进入while循环时.如果while循环没有尽快终止,我们最终会得到j == ell.由于[ell]已经被设置为范围中的最小元素,因此less(v,a [ell])必然返回false,然后循环将终止.
所以j永远不会减少到小于ell的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |