Arrays 查找数组的顶部和底部5个元素

Arrays 查找数组的顶部和底部5个元素,arrays,algorithm,rank,Arrays,Algorithm,Rank,问题: 我有一个n的数组≥ 10000个不同的正整数。尝试编写一个算法,输出A的一个元素x,这样x不在A的前5个元素中,也不在A的后5个元素中。A的前5个元素和后5个元素是A排序时的前5个元素和后5个元素。我还需要做大约50次比较 我所做的: 我用等级的概念来解决这个问题。 我取任意6个数字并找到其最大值。因此,这将确保我的数字不在前五个元素中。但是,这并不能确保我的数字不在最后5个元素中 迄今为止的伪代码: //从数组A中选择任意6个元素 int max = A[0]; for(int i

问题:

我有一个n的数组≥ 10000个不同的正整数。尝试编写一个算法,输出A的一个元素x,这样x不在A的前5个元素中,也不在A的后5个元素中。A的前5个元素和后5个元素是A排序时的前5个元素和后5个元素。我还需要做大约50次比较

我所做的:

我用等级的概念来解决这个问题。 我取任意6个数字并找到其最大值。因此,这将确保我的数字不在前五个元素中。但是,这并不能确保我的数字不在最后5个元素中

迄今为止的伪代码:

//从数组A中选择任意6个元素

 int max = A[0];
 for(int i = 0; i<6 ; i++)
 {
    if( A[i] > max)
        max = A[i];
 }
int max=A[0];
对于(int i=0;i max)
max=A[i];
}

这将给我一个数字(最大值),它肯定不在数组的前5个元素中,但我该如何处理最后5个元素

我认为您可以进一步改进算法,从列表中查找11个随机元素,而不是6个元素

从这11个随机元素中,对元素进行排序,然后选择第6个元素


第6个元素必然既不在前5个元素中,也不在后5个元素中。

我认为您可以进一步改进算法,从列表中查找11个随机元素,而不是6个元素

从这11个随机元素中,对元素进行排序,然后选择第6个元素


第六个元素必须既不在前5个元素中,也不在后5个元素中。

如果你不在乎选择哪一个元素(只不过不在后5个和前5个元素中),你所能做的就是得到前11个元素(你可以做任何事情来选择它们,甚至是随机选择),对它们进行排序,然后选择中间的元素

a1, a2, a3, a4, a5, Yours, a7, a8, a9, a10, a11

即使使用冒泡排序,您最终也会得到(11-1)*10/2=50个比较,但使用冒泡排序会少很多。

如果您不在乎选择哪一个元素(不仅不在乎是底部的5个和顶部的5个),那么您所能做的就是获得11个第一个元素(您可以做任何事情来选择它们,甚至是随机选择),对它们进行排序并选择中间的元素

a1, a2, a3, a4, a5, Yours, a7, a8, a9, a10, a11

即使使用冒泡排序,也会得到(11-1)*10/2=50个比较,但这样做会少很多。

你是为前5%的元素做的,还是只为前5%和后5%的元素做的?你是为前5%的元素做的,还是只为前5%和后5%的元素做的?我只是理解她试图在前5%和后5%元素中找到的问题是错误的。很好的清洁解决方案。我只是理解了她试图在前5%元素和后5%元素中找到的问题。好的清洁溶液。