求大话数据结构上的冒泡排序代码的解释 第一个循环限制条件不太懂 求哪位大侠解释一下!感激不尽!

第一个for循环的限制条件是i<l->length如果这样的话那最后一个元素不就循环不到了?书上是将第一个数组空间r[0]不用,直接从第二个空间存储要排序的第一个元素最后... 第一个for循环的限制条件是i<l->length 如果这样的话
那最后一个元素不就循环不到了?
书上是将第一个数组空间r[0]不用, 直接从第二个空间存储要排序的第一个元素
最后一个元素是r[l->length] 照书上这个代码 for(i=1;i<l->length;i++)
最后一个元素不是循环不到 是不是说最后一个元素不需要循环到 循环到了最后倒数第二个元素就可以了?求大侠指教!

《大话数据结构》上定义的顺序表结构是
#define MAXSIZE 10
typedef struct
{
int r[MAXSIZE+1] ;/* 用于存储要排序数组,r[0]用作哨兵或者临时变量 */
int length;
}sqlist;

void bubblesort(sqlist *L)
{
int i,j;
for(i=1;i<l->length;i++) ---->>>这一步的限制条件为什么不是i<=l->length ?
{
for(j=l->length-1;j>=i;j--)/* j从后往前循环 */
{
if(l->r[j]>l->r[j+1]) /* 若前者大于后者 */
{
swap(l,j,j+1); /* 交换两者的值 */
}
}
}
}
展开
 我来答
曹堃_520
2012-08-04 · 超过11用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:24.9万
展开全部
楼主看到这句话
if(l->r[j]>l->r[j+1]) /* 若前者大于后者 */

看看两个括号里面是什么, j 和 j+1 , 吧
而 i<l->length, i 又赋给了 j, 则 j + 1 不就是最后一个元素了吗
有 n 个元素, 最多只要循环 n - 1 次就能排好, 不信拿个最坏的例子试试

比如有 三个元素, 1, 2, 3, length == 3
j 的变量只到了 2, 那么 j + 1 就到 3 啦,
leiyangbdwk
2012-08-04 · TA获得超过3295个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4351万
展开全部
这一步的限制条件为什么不是i<=l->length ?

可以这样理解:
前面的循环,是i作为被比较的,
j是i后面的所有的元素,
i和j比较。
如果有等号=,那么后面j就没得比了,所以没必要啊、
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦在前方宋细辉
2012-08-05
知道答主
回答量:43
采纳率:0%
帮助的人:27.1万
展开全部
这个算法是依次找出最小元素,线性表有l->length个元素,前面的l->length-1次已经依次找出了前面l->length-1个最小的,剩下的一个自然是最大的了,也就不用比了。
也不能比,假如i<=l->length,也就是可以i=l->length,又有j>=i,若j=i=l->length时,r[j+1]不就溢出了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式