
有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
情况一:
将原数组 将 将 情况二:
情况三:
创建一个临时数组 遍历原数组 将
发布日期:2021-05-08 15:47:34
浏览次数:17
分类:精选文章
本文共 1435 字,大约阅读时间需要 4 分钟。
如何将一个数插入到已排序的数组中?
假设有一个按升序排列的数组a[11]
,其中包含10个元素,为了防止溢出,我们为数组预留了11个内存空间。现在需要将一个新的数num
插入到这个数组中。根据数组当前的情况,num
的位置可能有三种情况:
情况一:num
小于等于最小值
数组的最小值位于a[0]
。如果num
的值小于等于a[0]
,则需要将num
赋值给a[0]
,并将原数组中的所有元素向右移动一位。为了实现这一操作,可以使用一个临时数组b[11]
来存储原数组的元素。具体步骤如下:
a
中除a[0]
以外的所有元素复制到b
数组中。num
赋值给a[0]
。b
数组中的元素逐一赋值给a
数组的后续位置。情况二:num
大于最大值
数组的最大值位于a[9]
。如果num
的值大于a[9]
,则可以直接将num
赋值给a[10]
,即数组的最后一个位置。
情况三:num
位于最大值和最小值之间
如果num
的值位于a[0]
和a[9]
之间(包括等于a[9]
的情况),则需要找到num
插入的位置。具体步骤如下:
b[11]
,将原数组a
中的所有元素复制到b
数组中。a
,找到第一个比num
大的元素a[i]
,记录其下标i
。num
赋值给a[i+1]
,并将b
数组中的元素从i
位置开始逐一赋值给a
数组的后续位置。代码实现
#includeint main() { int a[11] = {2, 3, 4, 5, 6, 7, 8, 13, 18, 20}; int b[11]; int num, n, i; printf("请给num赋值\n"); scanf("%d", &num); if (num <= a[0]) { for (i = 0; i < 10; i++) { b[i] = a[i]; } a[0] = num; for (i = 0; i < 10; i++) { a[i+1] = b[i]; } } else if (num > a[9]) { a[10] = num; } else { for (i = 0; i < 10; i++) { if (num > a[i]) { n = i + 1; } } for (i = 0; i < 10; i++) { b[i] = a[i]; } a[n] = num; for (i = n; i < 10; i++) { a[i+1] = b[i]; } } printf("最后,数组值为:\n"); for (i = 0; i < 11; i++) { printf("%d ", a[i]); } return 0;}
总结
通过上述方法,我们可以轻松地将一个新的数插入到已排序的数组中。代码实现了三种不同的插入情况,确保了插入后的数组仍然保持有序。