插入数组的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:38:10
从键盘输入一个数 插入到数组S中 并保持s的从小到大的排列顺序
我的算法思路是:把a与s数组里的没一个数据比较
遇到 (a<s[i])时 就把a插入到S[i]中 然后S[i]依次往后移数组 最后输出数组的各个数值,以下是代码!
#include "stdio.h"
int main()
{
int a,j=-1,i,s[11]={1,3,4,5,6,8,9,12,14,23};
printf("please enter the number:");
scanf("%d",&a);
for(i=0;i<9;i++)
{ if (j!=-1) break; //j的值改变就终止循环
if(a<s[i])
{
j=i;
while(i<9)
{
s[i+1]=s[i];
i++;
}
s[j]=a;
} //感觉问题出在这里
}
if (a>s[9]) s[10]=a;
for (i=0;i<10;i++)
printf("%d\n",s[i]);
return 0;
}
输出的结果 让人失望 我知道问题出在哪里 就在s[i+1]=s[i];
的时候把S[i+1]的值改变了
有没有什么办法可以实现我的目的?
谢谢各位 回答满意 再++++

if(a<s[i])
{
j=i;
i=10;
while(i>=j) //问题在这里! 你原来是从下面想上迁移,假如有数组{1,2,3,4}做 s[i+1]=s[i];i++的循环话,那么这个数组就变成{1,1,1,1}大错特错呀 。附带提醒一个。最后的输出少了一个,你的数组有11个数字
{
s[i]=s[i-1];
i--;
}
s[j]=a;
}

这个问题可以用排序算法来完成比较简单一些;
int main()
{
int a,j=-1,i,s[11]={1,3,4,5,6,8,9,12,14,23};
printf("please enter the number:");
scanf("%d",&a);
i=10 /*原有数据个数*/
while(i) /*所有数据后移一位*/
{ s[i]=s[i-1];
i--;
}
s[0]=a; /*把a存入数组第一位中*/
for(i=0;i<10;i++) /* 对数组进行一次循环 */
if(s[i]>s[i+1])
{
a=s[i];
s[i]=s[i+1];
s[i+1]=a;
}
/*S数组中的数据是有序的了*/
for(i=0;i<11;i++)
printf("\n%d",s[i]);
}

while(i<9)
{
s[i+1]=s[i];
i++;
} //i<9时就循环 不对

#include "stdio.h"
int main()
{
int a,j=-1,i,s[11]={1,3,4,5