编写程序,将一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,输出后仍是升序。
. 提示:编写此程序时,可以先定义一个一维数组,设数组名为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)。
示列:
代码如下:
#include <stdio.h>
int 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;
}