求一个数组的中位数时间复杂度为O(n)

通过快速排序的思想,不断将数组划分为左右两部分,找到下标为数组长度一半的元素作为中位数。当分界下标j等于length/2时找到中位数,否则根据j与length/2的关系在相应区域继续划分查找。
摘要由CSDN通过智能技术生成

基本思路:中位数就是排序后下标为数组长度/2的元素

         这里,可以采用快速排序的思路(详细快速排序不多介绍,可参考这里)。即将不断地划分为左右两个区域,左边区域内的所有元素都小于某个主元,右边区域内的元素都大于某个主元。如果划分左右区域的分界j(这里的j和快速排序中的j的含义一致)刚好等于

length/2,那么就找到了中位数,否则,如果下标 j<length/2,那么就继续在右边区域划分查找,如果下标j>length/2,那么就继续在左边区域划分查找,直到 j == length为止。

    

public class GetMiddle {
	/**
	 * 用快速排序划分区域的方式来找到下标为length/2的元素,即数组的中位数
	 * @param array
	 * @param left
	 * @param right
	 * @return
	 */
	private in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值