线性时间选择 5元组选中位数法

本文深入探讨了如何在线性时间内使用5元组选中位数法来高效地找到数组中的中位数。这种方法在算法设计中尤其重要,因为它在大规模数据处理时能显著提升性能。通过实例解析,详细阐述了5元组的选取策略和步骤,帮助读者理解这一关键的排序与选择算法。
摘要由CSDN通过智能技术生成

//
/*
	//  [8/7/2011] By Whisper
	对那些证明,O(X)我真的不太懂怎么证,数学学的不是太好。
	希望读到这篇代码的,懂的朋友可以留言帮助我理解一下,我只是简单的将代码实现了,需要的就来拿吧。
	在看这个选择算法的时候,应该对前面那个三位取中划分有些了解。
	其中有好多细节,我就不写了,代码能表述一切。

	http://blog.csdn.net/v_july_v/article/details/6431001 这里有一篇很不错的讲解。

	算法导论9.3节代码实现
	主要思想:
	1. 对输入的数组分成 N/5个5元组,最后一个元组个数为 n % 5
	2. 对 N/5 个5元组,进行排序,找出其中的中位数(就是第3个数),再存成一个有N/5个数的中位数数组
	3. 再对这N/5个中位数, 递归查找中位数。
	4. 按找到的这个数,进行左右划分
	5. 如果要查找的第K大个数与这个划分点位置相等,则返回,如果小于,则在左边,否则在右边。
	
*/
//
//test.cpp VC6 编译通过
//
#include <iostream>
#include <time.h>
#include "initFuncs.h"       //此文件包含了随机初始化函数 RndInitArray() 和 输出函数 Outprint()


//下面是initFuncs.h的辅助函数代码,可以自己组织一下。
		 
/*

#ifndef _FUNC_INIT_
#define _FUNC_INIT_
  
	#include <STDLIB.H>
	#include <time.h>
	#include <stdio.h>
	
#endif
	  
void RndINitArray(int nArray[], int nA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值