c++二分法查找中位数

  • 举例:
    1 2 2 2 2 3

  • /*

  • Name: 中位数median

  • Author: 巧若拙

  • Description:

  • 描述

  • 给定n(n为奇数且小于1000)个整数,整数的范围在0-m(0<m<2^31)之间,请使用二分法求这n个整数的中位数。

  • 所谓中位数,是指将这n个数排序之后,排在正中间的数。

  • 输入

  • 第一行是两个整数n和m。

  • 第二行是用空格隔开的n个整数

  • 输出

  • 一个中位数

  • 样例输入

  • 5 10

  • 3 7 2 5 4

  • 样例输出

  • 4

  • */

  • #include<iostream>

  • #include<cstdio>

  • #include<cstdlib>

  •  
  • using namespace std;

  •  
  • const int MAXN = 1000;

  • int A[MAXN];

  •  
  • int main()

  • {

  • int n, m;

  • cin >> n >> m;

  • for (int i=0; i<n; i++)

  • cin >> A[i];

  •  
  • int mid, count, left = 0, right = m;

  • while (left <= right)

  • {

  • mid = (left + right) / 2;

  • count = 0;

  • for (int i=0; i<n; i++)

  • {

  • if (A[i] >= mid)//记录不小于mid的整数数量

  • count++;

  • }

  • if (count > n/2)

  • left = mid + 1;

  • else

  • right = mid - 1;

  •  
  • // cout << mid << " " << left << " " << right << " " << count << " " << n/2 << endl;

  • }

  •  
  • cout << right << endl;

  •  
  •  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值