直接插入排序算法中的疑问

最近在看《大话数据结构》中关于直接插入排序算法1voidInsertSort(SqList*L)2{3inti,j;4for(i=2;i<=L->length;i++)5... 最近在看《大话数据结构》中关于直接插入排序算法

1 void InsertSort(SqList *L)
2 {
3 int i,j;
4 for(i=2;i<=L->length;i++)
5 {
6 if (L->r[i]<L->r[i-1]) /* 需将L->r[i]插入有序子表 */
7 {
8 L->r[0]=L->r[i]; /* 设置哨兵 */
9 for(j=i-1;L->r[j]>L->r[0];j--)
10 L->r[j+1]=L->r[j]; /* 记录后移 */
11 L->r[j+1]=L->r[0]; /* 插入到正确位置 */
12 }
13 }
14 }

其中第11行为什么要将哨兵赋值给L->r[j+1] ?而不是L->r[j]??
展开
 我来答
cpucash
2013-03-28 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:958万
展开全部
你只是对链表中的一个节点中的一个数组r进行排序,那么其实就是对一个数组排序,和链表没有关系
那么就是简单的对一个数组排序,插入排序其实很简单的思路,

就是判断这个要插入的数据的位置,让这个位置后面的数据都后移一个位置
9 for(j=i-1;L->r[j]>L->r[0];j--)
10 L->r[j+1]=L->r[j];
从后面开始判断,如果r[j]>r[0],那么就后移一个位置,给要插入的数据倒出一个位置来

最后把数据插入到不大于要出入的数据的那个位置。

11 L->r[j+1]=L->r[0];
这个就是赋值了,也就是把r[0]插入到那个倒出的位置

这么说明白了吧
这就是插入排序,两层循环
眼眶的湿润
2013-03-28 · TA获得超过3279个赞
知道小有建树答主
回答量:806
采纳率:50%
帮助的人:567万
展开全部
注意,第11的语句没有包括在里层的for循环里,所以在里层for循环最后一次执行时,j--了一次
然后在执行第十一句,相当于是赋值给L->r[j]。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲁戦灬但丁
2013-03-28
知道答主
回答量:1
采纳率:0%
帮助的人:1504
展开全部
因为在9行的for循环中,默认只执行10行语句,且有L->r[j]>l->r[0]约束,所以j递减至0循环结束,此时记录后移只到达L->r[2]=L->r[1];并未包括L->r[1]=L->r[0],所有11行如此写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐霄沛
2013-03-28 · 超过24用户采纳过TA的回答
知道答主
回答量:315
采纳率:100%
帮助的人:121万
展开全部
j--了次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式