编写程序,将一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,输出后仍是升序。
. 提示:编写此程序时,可以先定义一个一维数组,设数组名为arr,并将其初始化为一个有序的数组。如由小到大的顺序排列的5个数:1,2,3,4,5,数组的长度至少定义成6,原因是要为插入的数留下位置。如数组定义为 int arr[6] = {1,2,3,4,5}。
要插入的数可以从键盘输入。例如定义变量int m; 并假设输入为0。插入过程(从后往前比较,并移动数组元素的位置)。
设数组名为arr,i从5开始,比较数组元素a[i]和变量m,如果arr[i] > m,那么arr[i + 1] = arr[i],将元素向后移,并使i = i – 1,开始新的数组元素arr[i]和变量m的比较。
如果arr[i] ≤ m,那么arr[i + 1] = m,插入操作完成。
如插入的数比整个序列的数都小,arr[0]=m,直接放在序列最前面。
有数据结构基础的同学更容易做出来。
代码的时间复杂度为O(N)。
示列:
代码如下:
#includeint main() { int arr[30] = { 0 }; int n = 0; scanf("%d", &n); //输入n个数 int i = 0; for (i = 0; i < n; i++) { scanf("%d ", &arr[i]); } //插入数据 int m = 0; scanf("%d", &m); for (i = n - 1; i >= 0; i--) { if (arr[i]>m) arr[i + 1] = arr[i]; else { arr[i + 1] = m; break; } } //处理插入的数据小于所有的数据 if (i < 0) arr[0] = m; //输出插入后的序列 for (i = 0; i < n + 1; i++) { printf("%d ", arr[i]); } return 0; }



