//
/*
// [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
线性时间选择 5元组选中位数法
最新推荐文章于 2024-05-04 19:14:52 发布
本文深入探讨了如何在线性时间内使用5元组选中位数法来高效地找到数组中的中位数。这种方法在算法设计中尤其重要,因为它在大规模数据处理时能显著提升性能。通过实例解析,详细阐述了5元组的选取策略和步骤,帮助读者理解这一关键的排序与选择算法。
摘要由CSDN通过智能技术生成