对数组进行排序,使第一个元素最大,第二个元素最小,依此类推。没有额外的空间

时间:2017-04-11 05:21:08

标签: arrays algorithm sorting

问题是:

  

给定一个未排序的数组,对它进行排序,使第一个元素最大,第二个元素最小,第三个元素是第二个元素,等等。

     

跟进:你可以不用额外的空间吗?

     

示例:

     

[2,4,3,5,1] - > [5,1,4,2,3]

我希望能够在不使用额外空间的情况下对数组进行排序。什么是最有效的解决方案?我只能想到一个O(n 2 )解决方案,它遍历数组以找到下一个最大和下一个最小的元素。有更有效的解决方案吗?

我查看了相关问题Sorting an array with alternate smallest and largest valuesSorting an array with alternate smallest-largest values,但答案对我的问题没有帮助。

1 个答案:

答案 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)