You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按字母顺序向数组插入值?C++插入函数实现逻辑求助

有序数组插入函数修正方案

原代码存在的核心问题

  • 插入点查找逻辑错误:遍历过程中会反复覆盖插入点值,找到符合条件的位置后未终止循环,若后续出现比待插入元素小的值,插入点会被错误重置为数组长度
  • 空数组插入后未更新有效元素长度len,也未提前返回,会触发后续不必要的逻辑
  • 移位循环逻辑完全错误:变量value未初始化,循环条件不成立,根本不会执行移位操作
  • 移位完成后未执行元素插入操作,也未更新有效元素长度,插入逻辑不生效

修正后完整代码

/*************************************
 * insert()
 *************************************/
bool people::insert(person arg)
{
    int i, insertionPoint = len; // 默认插入到末尾

    cout << "Array size is " << len << endl;

    // 判断数组是否已满
    if (len >= LIST_SIZE)
    {
        cout << "Array is full" << endl;
        return false;
    }

    // 数组为空时直接插入到第一位
    if (len == 0)
    {
        cout << "FIRST VALUE ADDED which is: " << arg.firstName << endl;
        map[0] = arg;
        len++;
        return true;
    }

    // 查找第一个比待插入元素大的位置作为插入点
    for (i = 0; i < len; i++)
    {
        if(arg < map[i])
        {
            insertionPoint = i;
            break; // 找到插入点后直接退出循环
        }
    }

    // 从最后一个有效元素开始倒序移位,避免覆盖
    for (i = len - 1; i >= insertionPoint; i--)
    {
        map[i + 1] = map[i];
    }

    // 插入元素,更新有效长度
    map[insertionPoint] = arg;
    len++;

    return true;
}

实现逻辑说明

  1. 前置校验:先判断数组是否已满,满了直接返回插入失败;数组为空时直接插入到0号下标,更新长度后返回
  2. 插入点查找:遍历已有有效元素,找到第一个比待插入元素大的下标作为插入点,所有元素都比待插入元素小的话,插入点默认是当前有效长度(即数组末尾)
  3. 元素移位:从最后一个有效元素开始倒着往插入点遍历,每个元素往后挪一位,避免正序移位导致的元素值覆盖问题
  4. 插入元素:把待插入元素放到插入点位置,更新有效元素长度,返回插入成功

内容的提问来源于stack exchange,提问作者J.J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:42:06