如何重新排列的阵列以这样的方式,每个元件比其相邻更大/更小的 [英] How to rearrange an array in such a way that each element is greater/smaller than its neighbours

查看:162
本文介绍了如何重新排列的阵列以这样的方式,每个元件比其相邻更大/更小的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,如果数字是:

30, 12, 49, 6, 10, 50, 13

该阵列将是:

The array will be:

[10, 6, 30, 12, 49, 13, 50]

正如你所看到的:

As you can see:

  • 在6比均为10和30和
  • 49大于12和13等。

数字都是不同的,真实的。我需要最有效的算法。

The numbers are all different and real. I need the most efficient algorithm.

推荐答案

这可以为O完成(N):

This can be done in O(n):

  1. 找到中位数为O(n)(说明是在<一个可用href="http://en.wikipedia.org/wiki/Selection_algorithm#Linear_general_selection_algorithm_-_Median_of_Medians_algorithm">Wikipedia
  2. 把比偏远地点的中位数和每一个更小的元素更大的每一个元素 - 就连地方

当然,这种假设所有的元素都是不同的,否则有时会失败。

Of course, this assumes that all elements are distinct, otherwise sometimes it will fail.

这篇关于如何重新排列的阵列以这样的方式,每个元件比其相邻更大/更小的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆