由键盘输入一个整数X,将X插入到有序整型数a中,使数组a仍然有序,然后输出数组a。已知int a[11]={1,5,9,10,16,21,27,35,46,60}
下面的程序是我自己写的,程序只能做到把输入的X按顺序插入到数组a中,但是插入进去以后数组a以后,数组a就少了一个元素!麻烦高人帮忙看看!
#include “stdio.h”
#include “conio.h”
main()
{
int i,j,t,a[11]={1,5,9,10,16,21,27,35,46,60,};
printf(“input x numbers:\n”);
for(i=2;i<12;i++)
scanf(“%d”,&a[i]);
printf(“\n”);
for(j=0;j<11;j++) /*进行11次循环,实现11趟比较*/
for(i=0;i<11-j;i++) /*在每一趟中进行11-j次比较*/
if(a[i]>a[i+1]) /*相邻两个数比较*/
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
printf(“the sorted numbers:\n”);
for(i=2;i<12;i++)
printf(“%d\ “,a[i]);
}
>> 本文固定链接: http://www.vcgood.com/archives/2799
>> 转载请注明: as36160686 2008年10月07日 于 C语言帝国 发表
建议你再看一下数组那边。
下标都已经越界了。。。你这个编程风格也不是很好。花括号还是必要的。不然大家没耐心看你的代码的。
你的算法很繁琐,发个比较容易点的
1.通过输入的数据找到插入点,用一个变量记录下、
2.插入点后面的所有数组元素向后面移一位,然后往插入点的那个地方赋于输入数据的值。
我想有两种方法,第一种是先把数插在数组最后面,然后把数组从小到大排列一下,不过这种方法好像和题目有点出入
第二种是下面:
#include “stdio.h”
#include “conio.h”
#define N 10
main()
{
int i,k,t,a[N+1]={1,5,9,10,16,21,27,35,46,60,};
clrscr();
printf(“输入一个数:\n”);
scanf(“%d”,&t);
for(i=0;i<N;i++)
{
if(t<a[i])
{
k=i;
break;
} /*这段是找要插入的位置,用K来记来第一个比t大的数的坐标*/
}
if(i<N)
{
for(i=N-1;i>k;i–)
a[i]=a[i-1];
a[k]=t;
}
else /*如果输入的数比最大的数还大,就把输入的t放在最后/*
a[n]=t;
for(i=0;i<N+1;i++)
printf(“%3d”,a[i])
}
楼上的做法比较好了,不过自己觉得还可以把特殊位置,
如头和尾先做,即比最小数还小和比最大数还大两种情况
然后也可以通过二分法来比较会使得平均运算次数更少些