题目描述C语言每日一练
2021年10月24日
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
分析原数组可能是递增的或递减的,首先判断排序规律。假如是从小到大的顺序,先判断新增的数字是否比原数组最大值(最后一位)大,如果不是,则依次和其他数组值比较,如果小于某数组元素,则将新增数字插到该数组元素之前。
向数组中插入元素也是这题比较重要的功能,实现数组插入,可以先将插入位置后面的数组元素全部后移一位,再插入新的数组到目标位置。
#includevoid Insert_Array_Item(int *array, int len, int num, int index); void Print_Array(int *array, int len); int Get_Array_Index(int *array, int len, int num, int order); int main() { int num = 0; int array_1[20] = {1, 3, 5, 7, 9,}; //顺序数组 int array_2[20] = {9, 7, 5, 3, 1,}; //倒序数组 int index_1 = 0; //插入的位置 int index_2 = 0; printf("现有两个数组:n"); Print_Array(array_1, 5); Print_Array(array_2, 5); printf("n请输入一个数字n"); scanf("%d", &num); index_1 = Get_Array_Index(array_1, 5, num, 1); //顺序排列 index_2 = Get_Array_Index(array_2, 5, num, 0); //逆序排列 Insert_Array_Item(array_1, 5, num, index_1); Insert_Array_Item(array_2, 5, num, index_2); printf("新的数组为n"); Print_Array(array_1, 6); Print_Array(array_2, 6); return 0; } void Insert_Array_Item(int *array, int len, int num, int index) { int i = 0; for(i = len - 1; i >= index; i--) //将数组后面元素向后移 array[i + 1] = array[i]; array[index] = num; //插入新元素 } void Print_Array(int *array, int len) { int i = 0; for(i = 0; i < len; i++) { printf("%d ", array[i]); } printf("n"); } int Get_Array_Index(int *array, int len, int num, int order) { int i = 0; if(order) //顺序排列 { if(num > array[len - 1]) return len; } else //逆序排列 { if(num < array[len - 1]) return len; } for(i = 0; i < len; i++) { if(order) { if(num < array[i]) return i; } else { if(num > array[i]) return i; } } return 0; }
运行结果 网上参考
原文地址:https://www.runoob.com/cprogramming/c-exercise-example39.html
下面两个示例都只考虑顺序排列
示例1:
// Created by www.runoob.com on 15/11/9. // Copyright © 2015年 菜鸟教程. All rights reserved. // #includeint main() { int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("原始数组是:n"); for(i=0;i<10;i++) printf("%4d",a[i]); printf("n插入一个新的数字: "); scanf("%d",&number); end=a[9]; if(number>end) a[10]=number; else { for(i=0;i<10;i++) { if(a[i]>number) { temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for(i=0;i<11;i++) printf("%4d",a[i]); printf("n"); return 0; }
示例2:(与示例1来源相同)
示例2使用了从数组尾部循环实现数组元素后移,这样看起来更加直观。
#includeint main() { int opo[11]={1,4,6,9,13,16,19,28,40,100};//原始的数组,题目给的 int a,b,c,e; printf("这是原始的数组"); for(a=0;a<10;a++)printf("%d ",opo[a]); printf("n输入一个数,插入原数组"); scanf("%d",&b); for(c=9;c>=0;c--){ //使用逆序的话,可以省掉很多过程,而且清晰 if(b



