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
题目给出的条件试“已经排好序的整形数组”
我们将不关心它的元素试如何输入,以及它试如何被排序的,那试另外的问题!

C语言中,怎样把一个整数按大小顺序插入已经排好序的整形数组中?
\/*整体思路是先将输入的十个数从小到大排列好,然后再将单独输入的数与数组比较大小并将其插入数组中,这部分是关键。需要注意的是我们在刚开始时将数组长度定义为11,就是为后面插入一个数预留的空位*\/#include <stdio.h>void main(){ int a[11]; \/*数组长度为11*\/ int n=10,i,j,k,t; int x,count...

C语言如何把一个整数按大小顺序插入已排好序的数组中?
main(){int i,j,p,n,s,a[11]={127,6,3,28,68,87,105,54,162,18};for(i=0;i<10;i++){for(j=i+1;j<10;j++) if(a[i]<=a[j]) p=a[i],a[i]=a[j],a[j]=p;}printf("输入参与排序的数字:");scanf("%d",&n);a[10]=n;for(i=0;i<11;i++)...

C语言问题:把一个整数按大小顺序插入已排好序的数组中。
a[p]=s;\/\/这三步交换a[i]和a[p],也就是把当前的最大值放到a[i]} printf("%d ",a[i]);}\/\/十次比较后,按最大到最小依次拍好了顺序,这个叫冒泡排序 printf("\\ninput number:\\n");scanf("%d",&n);\/\/输入要插入的数n for(i=0;i<10;i++)\/\/十次循环 if (n>a[i])\/\/...

c语言程序设计:有一个已排好序的数组,要求输入一个数后,按原来排序的规...
为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋...

C语言求助,把一个数插入到一个已排好序的数组中
1、可以用下面代码把数插入一个排好序的数组,数组进行迭代取值。2、下面是数组排序的代码,这里是按大小排序的,每次取值和输入的数比较,比输入的数小,就往后移动移位,直到移出输入数该放的位置,反之也是。3、或者用下图的代码实现,有一个已排好序的数组,现在插入一个数字。4、按原来已排好的...

C语言有一个已排好序的整型数组,有10个元素,要求从键盘输入一个数后...
int main(){ int a[20],i,n,x,k;printf("请输入一组顺序数(从小到大的顺序):");for( i=0; ;i++ ){ scanf("%d",&a[i]);if( getchar() == '\\n' )break;} n = i + 1; \/\/n表示数组内数字的个数 printf("请输入需要插入的数:");scanf("%d",&x);for(i=0;i...

C语言中,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它...
C语言,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。解:include int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};int temp1,temp2,number,end,i,j;printf("array a:\\n");for (i=0;i<10;i++)printf("%5d",a[i]);printf("\\n");pri...

...再输入一个整数,插入到已排好序的数组中,保持原数组的顺序不变...
第1个应该很简单,定义数组大一点,输入要查找的数据后,对比找到第一个比它大的数的位置,然后将该位置后的数全部顺延一位,将数据放入该位置 第2个 include<stdio.h> define N 20 \/\/宏定义数组大小 int main(){ int a[N];int n,Con=0,i=0,Total_p;printf("input n(n<%d):",N);scanf...

已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入...
【例】把一个整数按大小顺序插入已排好序的数组中。为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素...

C语言编程:一个已经排好序的数组,往里插一个数,并找出他插到哪里?
97 2014-05-11 c语言程序编写 有一个已排好序的数组,由键盘又输入一个数,要... 103 2020-06-03 有一个已排好序的数组,要求输入一个数后,将此数插入到数组中,... 2015-01-04 c语言向一个已经排好序的数组中插入一个整数,保持原来的顺序不... 13 更多...

相似回答