如何按字母顺序向数组插入值?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; }
实现逻辑说明
- 前置校验:先判断数组是否已满,满了直接返回插入失败;数组为空时直接插入到0号下标,更新长度后返回
- 插入点查找:遍历已有有效元素,找到第一个比待插入元素大的下标作为插入点,所有元素都比待插入元素小的话,插入点默认是当前有效长度(即数组末尾)
- 元素移位:从最后一个有效元素开始倒着往插入点遍历,每个元素往后挪一位,避免正序移位导致的元素值覆盖问题
- 插入元素:把待插入元素放到插入点位置,更新有效元素长度,返回插入成功
内容的提问来源于stack exchange,提问作者J.J.
相关产品推荐
相关产品推荐

