C语言编程问题 在已排好顺序的数列中插入一个数,并按原顺序排列

main()
{ int i,j,temp,insert,a[11]={11,22,33,44,55,66,77,88,99,100};
printf("\n");
for(i=1;i<=9;i++)
printf("%5d",a[i]);
printf("\n");
printf("input a data:\n");
scanf("%d",&insert);
printf("insert=%5d",insert);
if(insert>a[9])a[10]=insert;
else for(i=0;i<=8;i++)
{ if(insert>a[i]&& insert<a[i+1])
{for(j=9;j>=i+1;j--)
a[j+1]=a[j];
a[i+1]=insert;
}
}
printf("\nNow array a::\n");
for(i=0;i<=10;i++)
printf("%5d",a[i]);
}
当输入的数值不与数列中的数值相当时时成功的 比如 输入56结果为11 22 33 44 55 56 66 77 88 99 100
但是当与数列中的数值相当时就会出错 不如输入55 但得到的结果是11 22 33 44 55 66 77 88 99 100 0
我改了下程序如下
main()
{ int i,j,temp,insert,a[11]={11,22,33,44,55,66,77,88,99,100};
printf("\n");
for(i=1;i<=9;i++)
printf("%5d",a[i]);
printf("\n");
printf("input a data:\n");
scanf("%d",&insert);
printf("insert=%5d",insert);
if(insert>a[9])a[10]=insert;
else for(i=0;i<=8;i++)
{ if(insert>=a[i]&& insert=<a[i+1]) 这边提示错误
{for(j=9;j>=i+1;j--)
a[j+1]=a[j];
a[i+1]=insert;
break;
}
}
printf("\nNow array a::\n");
for(i=0;i<=10;i++)
printf("%5d",a[i]);
}

弄了半天终于知道了了 原来是有个重复出现的
if(insert>=a[9])a[10]=insert; 这边改正>=
else for(i=0;i<=8;i++)
{ if(insert>=a[i]&& insert<a[i+1]) 这边改正<
现在可以了 ,不知道还有没有其他的改法, 希望一块探讨, QQ 276339044 联系我
我觉得应该在找到位置后 后面的数后移,完毕后将insert赋a[i+1], 然后直接跳出 不让他i++ 再循环了,比较好 不知道怎么写

第1个回答  2014-04-21
既然是已经排序好的,就用链表吧,只有好的数据结构对应了好的算法,程序才会高效追问

还没学。。。

追答

如果 你非要这么 用的话,试试二分查找吧,插入的话,数组效率确实上不去,但是查找效率是可以提升好多的

追问

说实话二分法一直没弄明白 既然说提高效率了 那就在仔细研读下 谢谢了!

本回答被提问者采纳
第2个回答  2014-04-21
我觉得不用,将这个数插入最后,然后从后往前相比,如果比前面这个数小,换位子,直到不能换位子为止

不用找位置,直接更换
加我qq吧,我把源代码给你 4-6-9-4-8-2-8-6-6-
相似回答