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");
} 展开
#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");
} 展开
5个回答
展开全部
这段程序是从前往后进行排序的。该程序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}.依次类推,最后排序完成。
展开全部
#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;
}
//#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号位。。。。这样直到你那个插入点
把插入点空出来了,就可以把那个值插进去了。
另外,虚机团上产品团购,超级便宜
因此不需要临时变量。
因为最开始声明时候那数组肯定要比初始化的数目大,至少大1个,以便来存这个要插入的数
所以这个数组最后就空出来一个位置,这样,依次把前面大的数向后移动一位,注意这个移动是从后面开始的
比如我int a[11]; 总共初始化有10个已排好序的值,并有一个空位,我移动时,先把a[9]赋给
a[10],即 a[10] = a[9]; 这样原来最后的一个数就真的变成数组中最后一个位置的数了
依次下去a[9] = a[8]; 把8号位赋给9号位。。。。这样直到你那个插入点
把插入点空出来了,就可以把那个值插进去了。
另外,虚机团上产品团购,超级便宜
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是排序吗?、
建议用冒泡,特好理解,插入法用得比较少,
你可以考虑掌握冒泡的。
建议用冒泡,特好理解,插入法用得比较少,
你可以考虑掌握冒泡的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大家说一大堆都不如自己找张纸找只笔画个数组按程序走一遍理解的透彻。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询