问题是:
给定一个未排序的数组,对它进行排序,使第一个元素最大,第二个元素最小,第三个元素是第二个元素,等等。
跟进:你可以不用额外的空间吗?
示例:
[2,4,3,5,1] - > [5,1,4,2,3]
我希望能够在不使用额外空间的情况下对数组进行排序。什么是最有效的解决方案?我只能想到一个O(n 2 )解决方案,它遍历数组以找到下一个最大和下一个最小的元素。有更有效的解决方案吗?
我查看了相关问题Sorting an array with alternate smallest and largest values和Sorting an array with alternate smallest-largest values,但答案对我的问题没有帮助。
答案 0 :(得分:0)
前提条件:使用deque。
1.分类阵列。
环)
2.pop_back(array) - >将该元素插入i * 2位置。
例子)1,2,3,4,5,6,7
a)7(插入0) - > 1 2 3 4 5 6 => 7 1 2 3 4 5 6
b)6(插入2) - > 7 1 2 3 4 5 => 7 1 6 2 3 4 5
c)5(插入到4) - > 7 1 6 2 3 4 => 7 1 6 2 5 3 4(已完成)它的复杂性可能是O(nlog(n))+ O(n / 2)