首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言程序设计中的一个题目(已经排好的序的数组插入数后重新排列,该如何处理

2012-03-01 
关于C语言程序设计中的一个题目(已经排好的序的数组插入数后重新排列有一个已经排好的序的数组,及今输入一

关于C语言程序设计中的一个题目(已经排好的序的数组插入数后重新排列
有一个已经排好的序的数组,及今输入一个数,要求按原来排序的规律将它插入数组中。
程序如下
#include <stdio.h>
void   main()
{
int   a[11]={1,4,6,9,13,16,19,28,40,100};
int   num,i,j;
printf( "array   a:\n ");
for(i=0;i <10;i++)
printf( "%5d ",a[i]);
printf( "\n ");
printf( "insert   data: ");
scanf( "%d ",&num);
if(num> a[9])
a[10]=num;
else
{
for(i=0;i <10;i++)
if(a[i]> num)
{
for(j=9;j> =i;j--)
a[j+1]=a[j];
a[i]=num;
break;
}
}
printf( "now,array   a:\n ");
for(i=0;i <11;i++)
printf( "%5d ",a[i]);
printf( "\n ");
}
我要问的是。。。
为什么是
if(num> a[9])
a[10]=num;
不是a[10]最大吗?
既然都定义了a[11],为什么不是a[10]呢?
插入的数num比a数组最后一个数大,讲其插入的数放在a数组末尾...
但是为什么是a[9]呢?。。。
for(j=9;j> =i;j--)
a[j+1]=a[j];
a[i]=num;
break;
这段也不是很懂。。。

[解决办法]
for(j=9;j> =i;j--)
a[j+1]=a[j];
a[i]=num;
break;
这段也不是很懂。。。
-----------------------------------
if(num> a[9])
a[10]=num; //num比a[9]大则num插入到最后
else
{
for(i=0;i <10;i++) //如果num比a[9]小则从第一个数开始比较
if(a[i]> num) //只到num比a[i]小则将num插入到a[i]
{
for(j=9;j> =i;j--) //要把num插入到a[i]就必须把a[i]到a[9]的所有数依次后移一位
a[j+1]=a[j];
a[i]=num;
break;
}
}
[解决办法]
呵呵,这很简单呀。

你要先分析下算法。

对于向一个排序好的数组中插入数字,我们需要考虑两种情况:

第一:正常插入。即要插入的数字不比最大的数字大,先让比插入数字大的都向后移动,
然后再让数字插入相应的位置。

第二:非正常插入。即要插入的数字比最大的数字大,这时候不需要移动数字,只需要
直接把数字放在最大数字的后面一个里面就可以了。

你所问的就是第二种情况的处理。

因为a[9]里面存的是最大的数字,如果要插入的数字大于a[9]那么我们则需要,让a[9]
后面的元素a[10]等于要插入的数字。
所以也就有了上的语句
if(num> a[9])
a[10]=num;

热点排行