求一个无序数组的中位数

本文介绍了如何求解无序数组的中位数,提供了两种思路,一种是通过排序,另一种是利用优先级队列。在优先级队列的方法中,当数组元素为奇数个时,取前(n+1)/2个元素建立小堆,遍历数组剩余元素并与堆顶比较,最终堆顶元素即为中位数。同时,简要说明了C++中的优先级队列及其使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求一个无序数组的中位数

中位数是将数组排序之后,数组个数为奇数时,取中间的即为中位数;数组个数为偶数时,取中间两个的平均值即为中位数。

思路一:

要取得中位数,即给数组排序,使用任意排序算法均可,然后按数组下标取其中位数。

PS:该方法很直观,此处不实现

思路二:

1.设数组元素为n个,且为奇数个时,取数组前(n+1)/2个元素建一个小堆

2.遍历数组剩余元素,如果比堆顶元素大即入堆,如果比堆顶元素小或等于堆顶元素,即舍弃,不入堆

3.遍历完数组元素时,堆顶即为中位数


PS:此处要使用STL中的优先级队列,博主需要见缝插针的介绍一下优先级队列

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值