C程序编写,将一个数插入到一个已经有序的数组里,要求保持有序

谢谢。不要用深奥的。。我才学没躲少,指针还没学

源程序如下:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int main()

{

int i, j, t, k;//定义循环变量

const int n = 10;//定义数组元素个数

int a[n], b[n + 1];//定义两个数组

printf("您喜欢的有序数组:\n");//输入数组序列文字提

for (i = 0; i < n; i++)

{

scanf("%d", &a[i]);//循环输入数组元素

}

printf("请输入想插入的数字\n");//输入要插入的数字

scanf("%d", &k);

for (i = 0; i <= n; i++)//循环遍历

{

if (i == n) b[i] = k;//如果走到最后都没有地方插入就放在最后

else b[i] = 0;

}

for (i = 0; i < n; i++)//循环遍历

{

for (j = 0; j < n; j++)

{

b[j] = a[i++];//依次将数组a付给b

}

}

for (j = 0; j < n; j++)//冒泡排序,将数组数列排好

{

for (i = 0; i < n - j; i++)

{

if (b[i] > b[i + 1])

{

t = b[i];

b[i] = b[i + 1];

b[i + 1] = t;

}

}

}

for (j = 0; j < n + 1; j++)//顺序输出

{

printf("%d ", b[j]);

}

}

程序输出结果如下:


扩展资料:

/*#include<stdio.h>//感觉用二分法不错 直接插入排序也不错

//插入函数 往有序的数组a里插入值为element的元素使数组a依然有序 

//算法思想大概就是从头开始遍历找到第一个大于element的数 然后插入 然后后面的元素依次移动。

void insert_array(int *a,int length,int element)

{  

int i,j,t,f;  

for(i=0;i<length;i++)  

{    

if(a[i]>element)       

{     

t=i;//找到位置以后 可以依次移动数组元素腾出位置了      

for(j=length;j>=t;j--)          

{               

if(j==t)        

a[j]=element;      

else              

a[j]=a[j-1];//数组依次往后移动,不管正序还是倒序都可以

}     

f=1;   

break;     

}              

}  

if(f!=1)//当element大于所有数组元素时候   

{     

a[length]=element;   

}  

for(i=0;i<length+1;i++)  

{   

printf("%d ",a[i]); 


}

int main()


int a[5]={1,2,3,5,6}; 

int e=7;  

insert_array(a,5,e);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-29
如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数后的数组各元素值。这个地方不理解
第2个回答  2009-04-24
main()
{
int a[11]={12,23,28,36,40,55,61,73,87,92};
int t1,t2,num,end,i,j;
printf("\narray a:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
printf("Insert data:");
scanf("%d",&num);
end=a[9];
if(num>end)
a[10]=num;
else
{
for(i=0;i<10;i++)
{
if(a[i]>num)
{
t1=a[i];
a[i]=num;
for(j=i+1;j<11;j++)
{
t2=a[j];
a[j]=t1;
t1=t2;
}
break;
}
}
}
printf("Now,array a:\n");
for(i=0;i<11;i++)
printf("%4d",a[i]);
getch();
}

参考资料:谭浩强<C语言程序设计>

第3个回答  推荐于2017-09-12
【例】把一个整数按大小顺序插入已排好序的数组中。
为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。
main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++)
{ p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a[i])
{for(s=9;s>=i;s--) a[s+1]=a[s];
break;}
a[i]=n;
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
}

本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。 后移结束跳出外循环。插入点为i,把n赋予a[i]即可。 如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数后的数组各元素值。
程序运行时,输入数47。从结果中可以看出47已插入到54和 28之间。本回答被提问者采纳