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

如何让Rust代码计算出1-10向量的真实中位数5.5?

修复Rust中位数计算错误,得到正确结果5.5

你的代码计算1到10的向量中位数时得到6,正确结果应为5.5,问题出在奇偶长度的判断逻辑完全颠倒,且索引计算有误:

错误分析

  1. 奇偶判断逻辑反转:当向量长度为偶数(如10个元素)时,中位数是中间两个数的平均值;但原代码中偶数分支直接返回单个元素,反而在奇数分支去取两个数,逻辑完全搞反。
  2. 索引取值错误:偶数长度下,中间两个数的索引应为len/2 - 1和len/2(比如长度10时,索引4和5对应元素5和6),原代码的索引计算不符合这个规则。

修正后的代码

fn vector_median(vector: &mut Vec<i32>) -> f64 {
    vector.sort();
    let len = vector.len();
    if len % 2 == 1 {
        // 奇数长度,直接返回中间元素
        f64::from(vector[len / 2])
    } else {
        // 偶数长度,取中间两个元素的平均值
        let mid_left = vector[len / 2 - 1];
        let mid_right = vector[len / 2];
        (f64::from(mid_left) + f64::from(mid_right)) / 2.0
    }
}

fn main() {
    let mut vector1 = vec![1, 5, 6, 3, 2, 7, 9, 8, 4, 10];
    let median = vector_median(&mut vector1);

    println!("{:?}", vector1);
    println!("La media es {median}");
}

说明

  • 先排序向量(这部分原代码是对的)
  • 奇数长度时,直接取中间索引len/2的元素转为f64
  • 偶数长度时,取中间两个相邻元素(len/2 -1和len/2),求和后除以2得到平均值

运行修正后的代码,输出的中位数就是正确的5.5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:49:57