有序数组的插入

题目

给定存储了 n 个从大到小排好序的整数,试将任一给定整数 x 插入数组中合适的位置,以保持结果依然有序。分析算法在最坏、最好情况下的时间、空间复杂度。

解题步骤

1.找到要插入的位置

2.移动元素

3.插入元素

4.数组长度加1

代码

bool DecrSeqInsert(ArrPtr array, ElemSet x) {
    if (array->size == kMaxSize) {
        return false;
    }
    // 检查元素是否已经存在
    for (int i = 0; i < array->size; i++) {
        if (array->data[i] == x) {
            return false;
        }
    }
    // 找到插入位置
    int insertPos = 0;
    while (insertPos < array->size && array->data[insertPos] > x) {
        insertPos++;
    }
    // 移动元素
    for (int i = array->size; i > insertPos; i--) {
        array->data[i] = array->data[i - 1];
    }
    // 插入元素
    array->data[insertPos] = x;
    // 更新数组大小
    array->size++;
    return true;
}

步骤详解

1.检查数组是否达到最大长度,检查待插入元素是否存在。

2.找到insertPos(这里是数组的一个索引)

// 找到插入位置
    int insertPos = 0;
    while (insertPos < array->size && array->data[insertPos] > x) {
        insertPos++;
    }

比如数组[5,4,1,0],   现在要插入3,  那么insertPos就是2,即元素1的索引。

3.移动元素

比如数组[5,4,1,0],   现在要插入3,那么1和0要向后移动一位。

for (int j = array->size; j > insertPos; j--) {
    array->data[j] = array->[j - 1];
}

4.数组长度加1

你可能感兴趣的:(数据结构,算法,数据结构)