如何从未分类的int []蓝色和绿色数组中获取top10(蓝色+绿色)帧?

时间:2013-12-26 17:16:18

标签: arrays algorithm sorting data-structures

我有两个数组: -

int[] blueArray = new int[100];
int[] greenArray = new int[100];

greenArray和blueArray包含0到255之间的数字,表示每帧中相应颜色的强度。所以blueArray [0]的蓝色值为frame-1,blueArray [99]的蓝色值为frame-100。类似的排序适用于greenArray。

我想找出青色帧最高的前10帧。所以我正在寻找包含最高蓝+绿总和的前10帧ID。我可能不会使用额外的数据结构,并希望在O(n)时间内排在前10名。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

虽然不是很快,但实际上是O(n):

for (j = 0; j < 10; j++)
  max = j
  for (i = j + 1; i < 10; i++)
    if (blueArray[i] + greenArray[i] > blueArray[i] + greenArray[i])
      max = i;
  swap(blueArray[j], blueArray[max])
  swap(greenArray[j], greenArray[max])

答案 1 :(得分:0)

这称为部分排序。 Wikipedia提供了可用算法的精彩概述。你必须同时处理两个数组的事实不应该产生很大的不同,但它会阻止你使用任何现有的实现,所以你可能不得不自己动手。