如何按条件从数组中调取元素:实现获取指定次序最低价格函数问题
C语言按档位获取最低价格函数实现修复
原代码核心问题
- 冒泡排序逻辑错误:内层遍历使用j作为循环变量,但比较和交换时误用外层的i作为索引,完全无法完成排序
- 变量重复定义:在冒泡内层循环中重复定义i、j变量,覆盖外层的循环计数变量,导致循环逻辑彻底混乱
- 去重逻辑位置错误:去重代码被嵌套在冒泡排序的内层循环中,每轮排序都会重复执行,逻辑完全冗余且错误
- 功能缺失:未校验order参数合法性,未按需求返回对应档位的价格,函数无有效返回值
- 去重逻辑缺陷:未正确过滤重复元素,会导致tempArray中出现无效垃圾值,索引计数错位
修正后的完整代码
#include <stdio.h> int lowestPrice(int array[], int size, int order) { // 先做参数合法性校验 if (size <= 0 || order <= 0) { return -1; // 非法参数返回错误标识 } // 步骤1:冒泡排序升序排列原数组 for (int i = 0; i < size - 1; i++) { int swapped = 0; for (int j = 0; j < size - i - 1; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; swapped = 1; } } if (swapped == 0) { break; // 无交换说明已经有序,提前退出 } } // 步骤2:去重得到无重复的有序数组 int tempArray[size]; int uniqueSize = 0; for (int i = 0; i < size; i++) { // 跳过和上一个元素相同的重复值 if (i == 0 || array[i] != array[i - 1]) { tempArray[uniqueSize++] = array[i]; } } // 校验order是否超过去重后的最大档位 if (order > uniqueSize) { return -1; // 档位不存在返回错误标识 } // order=1对应最低,就是索引0的位置,以此类推 return tempArray[order - 1]; } // 测试示例 int main() { int prices[] = {12, 5, 8, 5, 20, 8, 3}; int size = sizeof(prices) / sizeof(prices[0]); // 获取第二低的价格 printf("次低价格:%d\n", lowestPrice(prices, size, 2)); return 0; }
功能说明
- order参数传1返回最低价格,传2返回次低价格,以此类推
- 参数非法或档位不存在时返回-1,可根据业务需求调整错误返回值
- 如果不需要自动去重,可删除去重步骤,直接返回排序后数组的
order-1索引对应值即可
内容的提问来源于stack exchange,提问作者kan3
相关产品推荐
相关产品推荐

