你走进一个包含200名儿童的健身房。这是9月8日,所以你有一个渴望找到第98个最矮小的孩子。你知道你可以将它们从最短到最高排成一行,但那会持续下去。 “我知道”,你认为,“我可以使用QUICKSELECT!”
你走出人群,闭上你的眼睛,伸出你的手指,并旋转三次。当你睁开眼睛时,你直接指向一个孩子Peter Pivot。你说:“快,每个比彼得都短的人,站在这里,每个人都比彼得高,站在那里,如果你和彼得一样高,你可以进入任何一组。”
孩子们洗牌,很快他们站在两个小组。你计算并找到较短组中的120名儿童,以及较高组中的79名儿童。你知道第98个最矮的孩子必须在较矮的小组中,所以你告诉彼得和79个更高的孩子坐在看台上。
你再闭上你的眼睛,伸出你的手指,并旋转三次。当你睁开你的眼睛时,你直接指向彼得的姐姐,宝拉皮奥特。你说:“快!那些还站着的人,如果你比宝拉短,站在这里,如果你比宝拉高,站在那里,如果你是同一个高度,你可以进入任一组。“
孩子们洗牌,很快他们站在两个小组。你计算并找到较短组中的59名儿童,以及较高组中的60名儿童。你知道第98个最矮的孩子必须在更高的组中,所以你告诉宝拉和59个矮小的孩子坐在看台上。
你再闭上你的眼睛,伸出你的手指,并旋转三次。当你睁开眼睛时,你直接指向宝拉的表弟Prudence Pivot。你说:“快!那些还在站立的人,如果你比普鲁登斯短,站在这里,如果你比普鲁登斯高,站在那里,如果你是同一高度,你可以进入任一组。“
孩子们洗牌,很快他们站在两个小组。你计算并找到较短组中的37名儿童,以及较高组中的22名儿童。你知道宝拉和另外59个矮小的孩子正坐在看台上。除了37个较矮的孩子仍然站立,你知道共有97个孩子比Prudence短。所以,普律当丝是第98个最矮小的孩子!
Quickselect FTW!
什么*确切*你不明白? – Gumbo
枢轴的概念,以及它如何在整个递归过程中重复选择,以及如何拆分列表以及如何操作每个子列表。 – Edge
数据透视表只是您选择用于帮助递归的列表中的一个点(例如,未排序列表中的第一项)。这将为您得到的列表的两半提供随机性,所以更有可能在两半之间得到均匀分布。 –