一个老问题:

给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,(这里给定的线性集是无序的)

仔细对比了下选择算法,和以前 找出Top K个数 以及 找出第K大的数 没什么区别,都是使用快排思想,用pivot划分子集,再从子集中找该数。

关键在于选择算法选取pivot的策略:

1. 将n的数组S分成n/5段,每5个元素各自选中位数。

2. 再从中位数中选择中位数x

3. 用x划分S

4. ...

这种策略保证了最坏情况T(n)=T(3n/4)+T(n/5)+O(n)=O(n)

算法实现:http://dev.firnow.com/course/3_program/java/javajs/20100719/462831.html

算法过程演示:http://ds.fzu.edu.cn/fine/resources/FlashContent.asp?id=82

一个算法资料的链接:算法http://algorithm.chaoskey.com/system/app/pages/sitemap/hierarchy