亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于一維數組x中的若干個數已按從小到大的順序有序,具體如下

關于一維數組x中的若干個數已按從小到大的順序有序,具體如下

C PHP
皈依舞 2022-04-15 17:11:58
一維數組x中的若干個數已按從小到大的順序有序;在主函數中輸入一個數,調用一個insert函數將其插入到該數組中,使得原數組依然按原序有序,在主函數中輸入原數組,顯示插入新元素之后的數組。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

這個題目中有兩個地方需要明確。
① 純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;
}



查看完整回答
反對 回復 2022-04-19
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

題目的意思就是寫一個帶參函數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;
}

看得懂不?



查看完整回答
反對 回復 2022-04-19
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

#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;
}



查看完整回答
反對 回復 2022-04-19
  • 3 回答
  • 0 關注
  • 267 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號