=================================正解================================================
每6只牛放到赛道里,就相当于一次排序,你要找出38头牛里最快的3只,其实就是找排序里的前3个元素。
赛道已经提示你是用归并排序来实现,直接参考归并排序即可。
由于赛道最多只能容纳6个元素,而每次归并的小箱里的后3个元素是肯定要被淘汰的,所以就是一种特殊的归并。
每次归并只取每个小箱里的前3元素,进行两两归并排序。
搞定。
两两归并排序参考:
http://www.hiahia.org/datastructure/paixu/paixu8.5.1.1-1.htm
本质上来说效率应该还略好于O(nlgn)。
================================下面这种方法有误,并不能保证是最大的3个数==========================================================
从数学计算角度:第一轮:
每组6头共6组.每组取前3名.共18名.与没参加的2头共20头参加第二轮.
第二轮:每组选5头共4组.每组取前3头.共12头参加第三轮.
第三轮:分2组.每组选3.共余6头.参加最后一次比赛.
共比13次
但,我自己算的话,
先把多于的2头,拿掉。
用36头,类似上述的比较。
每次比赛,都是6头一组。
这样,赛到第11轮时,会产生前3名;
这是,把拿掉的两头填进来,共5头,
再需要1轮就得出最终的前三名。
总共需要12轮,比上面的13轮少。
6 * 6 6次
6 * 3 3次
总共还剩 11头 在 分 5 和 6进行两场 分别取前三
最后 在一次
========================================================================
如果不考虑牛的体力问题,如果可以标记牛的号码那么这样可否。
1 6次6组
2 用6组中的第一跑,则剩下5头牛(剔除第一,必定是前三,剔除未进前三的那些组的牛,剔除第三名那组后面的两头牛,剔除第二排第三的那头牛,跑过的牛剩下5头继续比赛)1次
3 加入一头未跑过的牛,6头牛混跑取前二。1次
4 2的第一,3的第一,第二,剩下的那头牛,得出最后的前三。1次
共9次。