【发布时间】:2014-01-01 18:37:12
【问题描述】:
假设给定一个未排序的正整数列表,并且您希望以这样的方式对它们进行排序,使得元素交替为:(小于前一个元素),(大于前一个元素),(小于前一个元素)等...输出列表中的第一个元素可能会忽略该规则。例如,假设您的列表是:1,4,9,2,7,5,3,8,6。
一个正确的输出是...... 1,9,2,8,3,7,4,6,5
另一个是... 3,4,2,7,5,6,1,9,8
假设列表不包含重复项、任意大且尚未排序。
实现这一点的处理效率最高的算法是什么?
现在,标准方法是先简单地按升序对列表进行排序,然后从列表的末端交替剥离元素。不过,我想知道:有没有一种更省时的方法来做到这一点,而无需先对列表进行排序?
我问的原因:(仅在您关心时阅读此内容)
显然,这是我姐姐的男朋友在旧金山面试时向人们提出的问题。姐姐问了我这个问题,我马上就想出了标准答案。每个人都是这么回答的。然而,显然一个女孩想出了一个完全不同的解决方案,不需要对列表进行排序,而且它似乎有效。我姐姐无法向我解释这个解决方案,但从昨晚开始,这个想法就一直困扰着我。我会很感激任何帮助!谢谢!
【问题讨论】: