C语言中,怎样把一个整数按大小顺序插入已经排好序的整形数组中?

排序是从小到大,,已有数据为10个整数,且这十个数是自定义的,可以自己随便输入。
谢谢1楼,不过想补充一下,是在一个有10个数的数组中,而且这个数组中的是个数是在运行时,由用户自己输入的

/*整体思路是先将输入的十个数从小到大排列好,然后再将单独输入的数与数组比较大小并将其插入数组中,这部分是关键。需要注意的是我们在刚开始时将数组长度定义为11,就是为后面插入一个数预留的空位*/
#include <stdio.h>
void main()
{
int a[11]; /*数组长度为11*/
int n=10,i,j,k,t;
int x,count;
printf("请输入十个整数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /*用选择法将输入的十个数排列好*/
{
k=i;
for(j=i+1;j<10;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<10;i++) /*输出排列好的十个数*/
printf("%d ",a[i]);
printf("\n");
printf("请输入任意一个整数:\n");
scanf("%d",&x);
for(i=0;i<10;i++) /*将输入的数x与数组元素比较大小*/ {
if(x<a[i])
{
for(j=10;j>i;j--)
a[j]=a[j-1];
a[i]=x;
break;
}
}

for(i=0;i<11;i++) /*输出最后结果*/
printf("%d ",a[i]);
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-30
主要通过动态数组实现,malloc分配初始数组,realloc重新分配大小,具体代码如下,
#include <stdio.h>
#include <stdlib.h>

void bubble_sort(int a[], int n);//冒泡法排序
int midsearch(int a[],int n,int x);//二分法查找插入位置

int main(int argc, char *argv[])
{
int *arr=NULL;
int n=0;//初始数组大小
int i=0;
int x=0;//待插入数据
int pos=0; //待插入数据位置
while(!n)
{
printf("请输入一个正整数:\n");
scanf("%d",&n);
}
arr=(int *)malloc(sizeof(int)*n);//申请数组空间
if(arr==NULL)
{
printf("申请内存失败,程序异常退出!\n");
exit(-1);
}
printf("请为数组输入%d个整数:\n",n);
for(;i<n;i++)
scanf("%d",&arr[i]);//为数组赋值
bubble_sort(arr,n);//排序
for(i=0;i<n;i++)
printf("%d\t",arr[i]);
printf("\n");
printf("请输入任意一个整数:\n");
scanf("%d",&x);//为待插入数据赋值
arr=(int *)realloc(arr,sizeof(int)*(n+1));//调整数组大小,加1
pos=midsearch(arr,n,x);
for(i=n;i>pos;i--)
arr[i]=arr[i-1];//调整插入位置后的数组元素
arr[pos]=x;
printf("插入数据后:\n");
for(i=0;i<n+1;i++)
printf("%d\t",arr[i]);
printf("\n");
if(arr!=NULL)
{
free(arr);
arr=NULL;
}
return 0;
}
//冒泡法排序
void bubble_sort(int a[], int n)
{
int i, j, temp;
for (j = 0; j < n - 1; j++)
for (i = 0; i < n - 1 - j; i++)
{
if(a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}

//二分法查找插入位置
int midsearch(int a[],int n,int x)
{
int lo, hi, mid;//lo、hi、mid分别表示数组的低、中、高下标
lo = 0;
hi = n;
if(n==1)
{
return 1;
}

while(lo < hi)
{
mid = (hi + lo)/2;
if(x <= a[mid] && x>=a[mid-1])
return mid;
if(x < a[mid])
hi = mid;
else if(x > a[mid])
lo= mid +1;
}
}

函数void *malloc( size_t size );函数指向一个大小为size的空间,如果错误发生返回NULL。存储空间的指针必须为堆,不能是栈。这样以便以后用free函数释放空间。
void *realloc( void *ptr, size_t size );函数将ptr
对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以,小于原尺寸会造成数据丢失。
返回值是指向新空间的指针,如果错误发生返回NULL。
第2个回答  2009-12-29
假如你要插入一个n 你先找到第一个比n大的数,
然后先把后面的数都往后移,然后把n放进来

for (int i = 0; i < 10; i++)
{
if (a[i] > n)
{
for (int j = 9; j >= i; j--)
{
a[j + 1] = a[j];
}
a[i] = n;
break;
}
}
}
第3个回答  2009-12-29
题目给出的条件试“已经排好序的整形数组”
我们将不关心它的元素试如何输入,以及它试如何被排序的,那试另外的问题!