有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
发布日期: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数组的后续位置。
  • 代码实现

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

    总结

    通过上述方法,我们可以轻松地将一个新的数插入到已排序的数组中。代码实现了三种不同的插入情况,确保了插入后的数组仍然保持有序。

    上一篇:输出杨辉三角形(要求输出10行)
    下一篇:用筛选法求1-100的素数

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月28日 17时25分12秒