| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖
标题:[求助]还是用插入排序排列数组中的数,这个代码有点不明白(想通了)
只看楼主 加入收藏
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
 问题点数:0 回复次数:5 
[求助]还是用插入排序排列数组中的数,这个代码有点不明白(想通了)
#include<stdio.h>
#define n 5
void main()
{
int num[n],i,k,a,j,b;
printf("\n请输入数列:");
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
printf("\n排序前的数列:\t");
for(i=0;i<n;i++)
{
printf("%d\t",num[i]);
}
for(a=1;a<n;a++)
{
for(i=0;i<a;i++)
{
k=num[a];
if(k<num[i])//第一个比k大的数
break;
}
for(j=a;j>i;j--)//从第一个比k大的数开始向后依次移动一位
{
num[j]=num[j-1];
}
num[i]=k;
}
printf("\n排序后的数列:\t");
for(i=0;i<n;i++)
{
printf("%d\t",num[i]);
}
printf("\n");
}
这个代码对的我就是有点不明白
在比较的时候那个if条件不成立的时候后面的循环一样运行,最后还是num[i]=k赋值,那么拿去准备插入的数就排在第一位嘛,但是运行结果又不是这样的啊~就这里不明白

[此贴子已经被作者于2006-7-28 15:17:28编辑过]

搜索更多相关主题的帖子: 排列 代码 
2006-07-28 13:56
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
您去下个TC2.0吧,单步运行跟踪看看就知道了。
这次您要自己想想才能真正吸收里面的知识。

对不礼貌的女生收钱......
2006-07-28 14:04
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
得分:0 
嗯要的哈
想想嘛

2006-07-28 14:17
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
得分:0 

我又看了下
要是进不去if就说明num[a]a是最大的了;
那后面的循环就只是把最后一个元素向后移动一位,
但是那样的话i==a了,在后面的循环条件是j=a;j>i;就不成立啊 那怎么向后面移动啊


2006-07-28 15:00
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

没错,i==a了,后面的循环条件不成立,不执行循环,既然已经是最大,那数组就不用移动了,直接把num[i]赋值为k,也就是num[a].


对不礼貌的女生收钱......
2006-07-28 15:09
zpeye
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-26
收藏
得分:0 
明白了
这个比我昨天写的简单多了
看来做题前要把运算方法先想好啊
做题习惯不好 对插入法的认识不够

2006-07-28 15:15
快速回复:[求助]还是用插入排序排列数组中的数,这个代码有点不明白(想通了)
数据加载中...
 
   



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

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