ural 1306 堆排序找中位数

原创 2013年12月05日 19:10:12

题目要求找到一个数组的中位数

要是直接排序然后找到中位数的话,肯定是超内存的

选择堆排序,用STL中的make_heap, pop_heap, push_heap

代码如下:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

int main() {
	int N, half, i;
	int temp, data[ 150001 ];

	while (scanf( "%d", &N ) != EOF) {
		half = N / 2 + 1;
		for ( i = 0; i < half; i++ )
			scanf( "%d", &data[ i ] );
		make_heap( data, data + half );

		while ( i++ < N ) {
			scanf( "%d", &temp );
			if ( temp < data[ 0 ] ) {
				pop_heap( data, data + half );
				data[ half - 1 ] = temp;
				push_heap( data, data + half );
			}
		}
		printf( "%.1f\n", N % 2 == 1 ? (float)data[ 0 ]: ( (float)data[ 0 ] + max( data[ 1 ], data[ 2 ] ) ) / 2 );
	}
	return 0;
}               
/*
7
3 6 7 2 1 5 4
4
3 6 4 5
*/


版权声明:本文为博主原创文章,未经博主允许不得转载。

堆排序:动态数组求中位数

题目描述输入一组整数a1, a2, …, an ,每输入一个整数,输出到此时为止的中位数。 中位数定义:如果数串的大小是偶数 2j,中位数是从小到大排列的第 j 个数;如果数串的大小是奇数 2j+1,...
  • u011606714
  • u011606714
  • 2016年04月10日 00:43
  • 1106

找出序列中的中位数

序列中的中位数
  • cpu_12593
  • cpu_12593
  • 2015年09月05日 22:47
  • 2764

线性时间的中位数查找算法

原帖链接 一、以期望线性时间做选择 一般来说,中位数的查找算法都是基于先排序,后找中间位置的数字的算法,但是因为线性时间排序所收到的限制比较大,而如果使用基于比较的排序,时间复杂度将至...
  • z690933166
  • z690933166
  • 2014年03月09日 14:49
  • 11172

利用快排找中位数【未完成】

快速排序找中位数 int sort(int* R,int low,int high) ; int median1(int *R,int n); int median2(...
  • wyq_tc25
  • wyq_tc25
  • 2016年06月02日 10:19
  • 226

用快速排序找中位数

这个很好理解, 就像找前K个数一样, 这个就像找前n/2个数, 不过这里说只是要中位数就没有必要找完了, 于是就可以大规模的剪枝;剪枝方法就是递归的时候对不可能有中位数的区间就直接减掉, 这个可是很大...
  • ygqwan
  • ygqwan
  • 2013年12月20日 10:39
  • 4477

【原理思路】大数据中找中位数(腾讯面试题)

题目: 在一个d
  • u011708432
  • u011708432
  • 2014年05月21日 18:53
  • 1558

LintCode#80FindMedian(利用快排找中位数)

查找中位数:用时间复杂度为o(nlogn)的算法,给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。...
  • u012559634
  • u012559634
  • 2017年06月02日 15:02
  • 991

找中位数问题——分治法

题目:设A和B都是从小到大已经排好序的n个不等的整数构成的数组, 如果把A与B合并后的数组记作C,设计一个算法找出C的中位数。 解题思路: 思路一: 对将A和B合并数组成C,并且进行排序,然后直接...
  • TommyZht
  • TommyZht
  • 2015年05月29日 16:25
  • 2165

一个长度为A的无序数组,找到中位数

思路1: 1.1 将前(n+1)/2个元素调整为一个最小堆; 1.2 对后续每一个元素和堆顶比较,如果小于等于堆顶,丢弃之,去下一个元素。如果大于堆顶,用该元素取代堆顶,调整堆,去下一个元素重复1...
  • ZHL30041839
  • ZHL30041839
  • 2014年07月13日 20:15
  • 989

找中位数O(n)算法

题目描述: 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。 样例 给出数组[4, 5, 1, 2, 3]...
  • TommyZht
  • TommyZht
  • 2015年07月21日 10:09
  • 3244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ural 1306 堆排序找中位数
举报原因:
原因补充:

(最多只允许输入30个字)