tigerajs
n个数字,怎么找出它们的中间值
n是奇数,要求采用尽量少的比较符号
77h2_eleven
[quote]原帖由 [i]tigerajs[/i] 于 2008-6-28 16:59 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8692756&ptid=1182942][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
n是奇数,要求采用尽量少的比较符号 [/quote]
楼主什么意思?能不能说的清楚点?
emacsnw
[quote]原帖由 [i]tigerajs[/i] 于 2008-6-28 00:59 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8692756&ptid=1182942][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
n是奇数,要求采用尽量少的比较符号 [/quote]
类似于快速排序。n个数中找第k小的元素:随便取一个元素(比如第一个)作“标尺”,把所有小于它的搞到它左边,大于等于它的放到它右边。设左边有m个元素。
如果m=k-1,那么返回标尺;
如果m<k-1就在右边的n-m-1个数中找第k-m-1小的元素;
如果m>=k就在左边m个数中找第k小的元素。
平均时间复杂度 O(n).
另外算法导论里有保证时间复杂度是O(n)的选择第k小元素的算法,不过那个常熟系数相对比较大。