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

如何按条件从数组中调取元素:实现获取指定次序最低价格函数问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:04