题目

在有序数组中插入一个新数并保持有序

思路

本题在已有序数组中插入一个新数 key,插入后仍有序。 先找到第一个 a[i] > key 的位置 pos(即插入点);把 pos 及之后的元素整体后移一位(memmove 或从尾向前循环);在 pos 放入 key。若 key 最大则插在末尾。

解题分析

有序数组插入:找第一个 >x 的位置,后面元素整体后移。从尾部往前挪避免覆盖。也可先找下标再写 x。

完整程序

import java.io.*;

public class Main {
    public static void main(String[] args) {
        int n = 3;
        int[] a = new int[n + 1];
        for (int i = 0; i < n; i++) a[i] = 1;
        int x = 3;
        int pos = n;
        while (pos > 0 && a[pos - 1] > x) {
            a[pos] = a[pos - 1];
            pos--;
        }
        a[pos] = x;
        for (int i = 0; i <= n; i++) System.out.print(a[i] + (i < n ? " " : "\n"));
    }
}

运行示例

输出:

1 2 3 5