| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:关于插入排序的一点疑问,真心请教!
只看楼主 加入收藏
sibswjc
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-5
结帖率:20%
收藏
已结贴  问题点数:20 回复次数:4 
关于插入排序的一点疑问,真心请教!
各位,小弟初学C语言,目前在看《算法导论》那本大部头。刚刚看到第一个关于插入排序的伪代码描述,有几个问题实在想不通,
第一,代码的第6行,互换两个值不应该需要第三个变量吗?譬如t=b,b=a,a=t这样才能实现a、b值互换吗?

第二,代码的第7行,变量i自减,为什么?

第三,代码的第8行,A[i+1]的值不是已经在代码的第6行赋值了吗,为何还要再赋值?


附伪代码
INSERTION-SORT(A)
1    for j=2 to length[A]
2        do key=A[j]
3         Insert A[j] into the sorted sequence A[1..j-1].
4           i=j-1
5           while i>0 and A[i]>key
6              do A[i+1]=A[i]
7                i=i-1
8                 A[i+1]=key
搜索更多相关主题的帖子: C语言 
2012-09-06 16:37
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
收藏
得分:10 
这个不是交换值,是数组元素向后移动,从而找到key的插入位置,也就是第8行A[i+1]处
2012-09-06 16:53
magicpaul007
Rank: 2
等 级:论坛游民
帖 子:7
专家分:58
注 册:2012-9-6
收藏
得分:10 
回复 楼主 sibswjc
首先是这样一个问题,你的伪代码打错了,我看了一下算法导论最后一行的缩进有问题,应该是A[i+1]=key和while在一行上。
然后说具体问题,这个叫做插入排序,while那个i的循环要做的就是查找出key值需要插入的位置,所以会有i自减。找到key值的位置,如楼上所说将数组值向后移动,然后插入,所以不是交换排序。
2012-09-06 17:08
sibswjc
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-5
收藏
得分:0 
感谢二位点拨,我再领会领会
2012-09-07 09:58
sibswjc
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-5
收藏
得分:0 
回复 3楼 magicpaul007
再请教个问题,伪代码的缩进有什么讲究吗?有没有什么规范之类的,谢谢!
2012-09-07 10:41
快速回复:关于插入排序的一点疑问,真心请教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020722 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved