伪代码在阵列中找到最低的10%

时间:2014-02-23 12:36:40

标签: arrays sorting pseudocode

我需要在数组中找到最低和最高10%的数字,这笔交易是我需要它才能非常快速地工作!

例如对于数组:20,50,77,80,6,8,41,60,63,15,31,13,90,9,34,41,54,85​​,93,2,52

我最初的解决方案是使用快速排序对数组进行排序:

2,6,8,9,13,15,20,31,34,41,50,52,54,60,63,77,80,85,90,93

然后我很容易就知道我的最高和最低10%

低:2,6 高:90,93

但事实是这个数组变化非常快,排序解决方案对我不起作用。任何人都建议找到我需要的速度有多快?

2 个答案:

答案 0 :(得分:2)

我认为您需要考虑使用不同的数据结构来存储数据。例如,使用B树意味着您可以在对数时间内插入和删除元素,但您的数据仍在排序,因此您可以在正常数组中同时获得最低和最高10%。

http://en.wikipedia.org/wiki/B-tree

答案 1 :(得分:1)

我没有看到除排序之外的其他解决方案。但是,如果您可以自由地在自己的数据结构中组织事物并控制输入数组,那么可以这样做以节省时间:

  1. 创建一个有序列表(或其他有序结构),大小为原始数组的10%。提供将元素添加到此有序列表中的方法。另一个答案表明B树,也可能用于这种方法。
  2. 将元素添加到原始数组时,也将元素添加到您的有序列表
  3. 有序列表将始终包含前10%。
  4. 对于大型数据集,对Aston方法的改进可能非常小,因为该算法仅增加了我的对数比例。但是,如果您的数据集很小,那么仅使用10%大小的有序数据结构可能会带来真正的好处。

    注意: 如果元素从原始数组中删除,我的方法可能不如从一开始就使用Aston建议,因为删除了一个元素可能会触发完整的列表运行以完全重新填充订单结构。