C程序:一维数组x中的若干个数已按从小到大的顺序有序;在主函数中输入一个数,调用一个insert函数将其插

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C程序:一维数组x中的若干个数已按从小到大的顺序有序;在主函数中输入一个数,调用一个insert函数将其插相关的知识,希望对你有一定的参考价值。

一维数组x中的若干个数已按从小到大的顺序有序;在主函数中输入一个数,调用一个insert函数将其插入到该数组中,使得原数组依然按原序有序,在主函数中输入原数组,显示插入新元素之后的数组。

这个题目中有两个地方需要明确。
① 纯C的话, 除非使用动态分配的数组,否则对固定的数组作insert几乎不可能;
② 其实insert不一定老老实实地对数组的每个元素作比较大小,那样效率不高。 你可以直接添加到新的数组的末尾, 然后排序一下就可以了。
下面给了比较完整的例子, 里面包含两个部分, 即对固定维数的数组作“伪”insert操作, 其实就是拷贝到新的扩展后的数组, 添加, 排序, 然后输出; 另一个部分, 则是利用动态数组, 然后realloc扩展, 注意realloc成功后, 需要把新的地址指向先前的那个动态数组, 这样才是扩容。
排序和数组打印都用到了额外的函数, 一并附上了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXCHARS 5 /* INT_MAX digits */

int insert_static(const int arr[], const unsigned int arr_size, const int val_ins);
int insert_dynamic(int **parr, const unsigned int arr_size, const int val_ins);
int cmpval(const void * a, const void * b);
int print_array(const int *arr, const unsigned int arr_size);

int main(int argc, char *argv[])

int arr_input[] = 40, -10, 100, 90, 20, 25 ;
int *dyn_arr;
unsigned int arrsize;
int i;
char line[MAXCHARS+1] = '\0';
int val_insert;

/* 1. Get input array size & sort it if not sorted yet */
arrsize = sizeof(arr_input)/sizeof(arr_input[0]);
qsort(arr_input, arrsize, sizeof(int), cmpval);

/* 2. Get a input number for inserting */
printf("Input a integer : ");
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &val_insert);

/* 3. Print the original input array */
printf("The original array is : \n");
print_array(arr_input, arrsize);

/* 4. Static array pseudo inserting */
printf("The static array pseduo insert result :\n");
insert_static(arr_input, arrsize, val_insert);

/* 5. Dynamic array inserting */
/* 5a) dynamic allocating */
dyn_arr = (int *)malloc(arrsize*sizeof(int));
if (dyn_arr == NULL)

fputs("Error in memory allocation.", stderr);
return -1;


/* 5b) memory copy */
memcpy(dyn_arr, arr_input, arrsize*sizeof(int));

/* 5c) inserting */
printf("The dynamic array inserting result: \n");
insert_dynamic(&dyn_arr, arrsize, val_insert);

/* 5d) memory release */
free(dyn_arr);

/* 6. The end... */
return 0;


int insert_static(const int arr[], const unsigned int arr_size, const int val_ins)

int *pNewArray;
unsigned int new_arr_size;

new_arr_size = arr_size + 1;
pNewArray = (int*)(malloc(new_arr_size * sizeof(int)));
if (pNewArray == NULL)
return -1;

memcpy(pNewArray, arr, arr_size*sizeof(int));

pNewArray[arr_size] = val_ins;
qsort (pNewArray, new_arr_size, sizeof(int), cmpval);

print_array(pNewArray, new_arr_size);

free(pNewArray);

return 0;


int insert_dynamic(int **parr, const unsigned int arr_size, const int val_ins)

int *ptemp;
unsigned int new_arr_size;

new_arr_size = arr_size + 1;

ptemp = (int*)realloc(*parr, new_arr_size*sizeof(int));
if (ptemp == NULL)
return -1;

*parr = (int*)ptemp;

(*parr)[new_arr_size-1] = val_ins;
qsort ((*parr), new_arr_size, sizeof(int), cmpval);

print_array((*parr), new_arr_size);

return 0;

int cmpval(const void * a, const void * b)

return ( *(int*)a - *(int*)b );


int print_array(const int *arr, const unsigned int arr_size)

int i;

for (i=0; i<arr_size; i++)
printf("%d ",arr[i]);

printf ("\n");
return 0;
参考技术A 题目的意思就是写一个带参函数insert。
#include <stdio.h>
#include <stdlib.h>
int b[20];
int* insert(int n,int num,int a[])//输入的数为n,num为数组的长度,有序的数为a[]
int i;
for(i=0;i<num;i++) b[i]=a[i]; //把a数组里的数 复制到 b数组
b[num]=n;//把插入的数放在最后一位
for(i=num;n<b[i-1];i--)//若新加入的数比前一位数小,就和前一位交换数据
int shu; //交换位置过程
shu=b[i];
b[i]=b[i-1];
b[i-1]=shu;

return b;

int main(int argc, char *argv[])

int n;
scanf("%d",&n);//输入要插入的数
int i;
int a[10]=1,11,21,31,41,51,61,71,81,91;
int k=sizeof(a)/sizeof(int);//计算数组的长度
int a2[k+1]; //定义一个比原数组长度大一的数组
insert(n,k,a);//数据都存在全局数组b[20]里了
for(i=0;i<k+1;i++)//sizeof(a)/sizeof(int)+1表是比原数组的长度大了一的数
a2[i]=b[i]; //存入合适的数组里

for(i=0;i<k+1;i++)//显示
printf("%d ",a2[i]);
system("PAUSE");
return 0;


看得懂不?
参考技术B #include <stdio.h>
void insert(int *Array,int elem,int len)
//该函数实现将元素elem插入到有序数组Array中使得Array任然有序

//查找插入位置
int i,j;
for(i=0;i<len;i++)

if(Array[i]>elem)//即找到插入元素的位置即为第i个位置
break;


//将原来第i~len-1位置的所有元素向后以一个位置
for(j=len-1;j>=i;j--)
Array[j+1]=Array[j];
//将元素插入到正确的位置即可
Array[j+1]=elem;

int main()

//因为要插入元素所以数组空间应该比实际元素空间多一个
int a[9]=1,2,3,5,6,7,8,9;
int len,insertnum,i;
len=sizeof(a)/sizeof(int);

//输入数据
printf("输入需要插入到数组中的数:");
scanf("%d",&insertnum);

//执行插入元素
insert(a,insertnum,len-1);

//遍历输出数组元素
printf("插入元素%d后:",insertnum);
for(i=0;i<len;i++)
printf("%d ",a[i]);
printf("\n");

return 0;

删除一维数组中所有相同的数,使之只剩下一个,数组中的数已按由小到大顺序排列。

跪求答案
C语言程序设计的一道题

思路,读取第一个元素,放入一个变量,在读下一个元素,如果相等,下面的元素全部上移,如果不相等当前元素赋给变量,在读下一个元素写个简单的:
a[5]=1,2,3,4,5;//假设有五个元素
j=a[0];//把第一个复给J
le=5//数组的长度
for(i=1;i<le;i++)//开使循环
if(j==a[i])//如果上一个与下一个一样
for(k=i;k<le-1;k++)
a[k]=a[k+1];//所有的元素上移

le--;//数组长度减一;
else
j=a[i];//如果不相等,继续判断下一个;


第二种思路比较简单,就是把这个数组赋给一个新的数组;
a[5];//略
b[5];//新的数组
le=0;//初使长为0;
b[le]=a[0];//赋初值为a[0]
for(i=1;i<5;i++)
if(b[le]==a[i])//如果相同判断下一个
continue;
else//如果不同
le++;//长度加一,
b[le]=a[i];//赋值


C很长时间没写了,可能就不对的地方,反正就是这个思路
参考技术A #include <stdio.h>
#define N 10
void main()

int a[N];
int i,j=0;
printf("输入原数组:\n");
for(i=0;i<N;i++)

scanf("%d",&a[i]);

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


if(a[i+1]==a[i])
continue;
else

a[j+1]=a[i+1];
j++;



printf("新数组为:\n");
for(i=0;i<j;i++)
printf("%d ",a[i]);
printf("\n");
本回答被提问者采纳

以上是关于C程序:一维数组x中的若干个数已按从小到大的顺序有序;在主函数中输入一个数,调用一个insert函数将其插的主要内容,如果未能解决你的问题,请参考以下文章

删除一维数组中所有相同的数,使之只剩下一个,数组中的数已按由小到大顺序排列。

c语言:删去一维数组中所有相同的数, 使之只剩一个.求一完整正确程序

c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢

编写一个函数SORT将放到一位数组中的若干个数安从小到大的顺序排序

删除数组中重复的元素

有一以排好序的数组(一维,从小到大),现插入一个元素,保持该数组仍然有序