C语言插入法

请详细解释一下下面代码,或者有c语言插入法视频讲解#include<stdio.h>//#include<conio.h>voidmain(){intr[11];inti... 请详细解释一下下面代码,或者有c语言插入法视频讲解
#include <stdio.h>
//#include <conio.h>
void main()
{
int r[11];
int i,j;
printf("Please input 10 number:\n");
for(i=1;i<11;i++)
{
scanf("%d",&r[i]);
}
for(i=2;i<11;i++)
{
r[0]=r[i];
j=i-1;
for(;r[j]>r[0];j--)
{
r[j+1]=r[j];
}
r[j+1]=r[0];
}
printf("the result of sort:\n");
for(i=1;i<11;i++)
{
printf("%3d",r[i]);
}
printf("\n");
}
展开
 我来答
寸草惜阴阳
2011-07-26 · TA获得超过362个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:389万
展开全部
这段程序是从前往后进行排序的。该程序r[1]--r[10]存储10个数,r[0]用来做标记。首先对于单独的r[1]是有序的。所以我们从r[2]开始和r[1]比较。这是为什么第一个for循环for(i=2;i<11;i++);从i=2开始的原因。进入第一个for循环(是排序的那个,不是输入的那个)之后首先把r[i]元素保存在r[0]中,然后让该元素和其前面的元素相比较这一步反映在第二个for循环中for(;r[j]>r[0];j--),在这里体现出了r[0]的标号作用,我们并不关心j是否会小于0,因为当j==0是r[j]>r[0]已经不再成立。循环体内时比r[0]大的元素依次后移,推出了循环,这样当第二个for循环退出时就是因为r[j]>r[0]不再成立,即找到了一个元素r[j]小于等于r[0];j之后的都比r[0]大。这时r[0]就应该在j+1的位置,即r[j+1]=r[0];这样经过一个内层的for循环就把原来i位置的元素按顺序插入到其前面有序的元素当中去了,当i==10全部排序完成。如原数组的元素为r[]={3,2,1,8,5},当i==2时的依次内循环后变为r[]={2,3,1,8,5};i==3时,我们要拿1和全面的元素比较,得到r[]={1,2,3,8,5}.依次类推,最后排序完成。
lijinlina
推荐于2017-11-24 · TA获得超过103个赞
知道答主
回答量:132
采纳率:0%
帮助的人:109万
展开全部
#include <stdio.h>
//#include <conio.h>
int main()
{
int r[11];
int i,j;
printf("Please input 10 number:\n");
for(i=1;i<11;i++)
{
scanf("%d",&r[i]);//输入10个数
}
for(i=2;i<11;i++)
{
r[0]=r[i];//将待插入的元素放在r[0]
j=i-1;
for(;r[j]>r[0];j--)
{
r[j+1]=r[j];//for循环寻找比带插入元素小的位置
}
r[j+1]=r[0];//将该元素放在寻找到的那个位置的后一位置
}
printf("the result of sort:\n");
for(i=1;i<11;i++)
{
printf("%3d",r[i]);
}
printf("\n");
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-27
展开全部
它所做的过程是先移动较到的数据,然后再把移动后空出来的那个插入点 插入这个数
因此不需要临时变量。
因为最开始声明时候那数组肯定要比初始化的数目大,至少大1个,以便来存这个要插入的数
所以这个数组最后就空出来一个位置,这样,依次把前面大的数向后移动一位,注意这个移动是从后面开始的
比如我int a[11]; 总共初始化有10个已排好序的值,并有一个空位,我移动时,先把a[9]赋给
a[10],即 a[10] = a[9]; 这样原来最后的一个数就真的变成数组中最后一个位置的数了
依次下去a[9] = a[8]; 把8号位赋给9号位。。。。这样直到你那个插入点
把插入点空出来了,就可以把那个值插进去了。
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
红颜若泪
2011-07-26 · TA获得超过127个赞
知道答主
回答量:92
采纳率:0%
帮助的人:51.5万
展开全部
这个是排序吗?、

建议用冒泡,特好理解,插入法用得比较少,

你可以考虑掌握冒泡的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zero_fn
2011-07-26 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:457万
展开全部
大家说一大堆都不如自己找张纸找只笔画个数组按程序走一遍理解的透彻。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式