我希望能够在C#中找到一个更快的函数来查找整数数组中第N大的数字。这个函数需要输入N和数组,返回该数字的索引。
这是我已经有的代码。它仅仅对数组进行排序,然后返回那个数字的索引。尽管它可以完美地工作,但我不确定是否这是最快的方法。似乎有一种算法可以避免完全排序。
static int myFunction(int[] array, int N){
int[] indexes = new int[array.Length];
for (int i = 0; i < indexes.Length; i++)
indexes[i] = i;
for (int i = 0; i < array.Length; i++)
{
for (int j = i + 1; j < array.Length; j++)
{
if (array[i] < array[j])
{
int m = array[j];
array[j] = array[i];
array[i] = m;
m = indexes[j];
indexes[j] = indexes[i];
indexes[i] = m;
}
}
}
return indexes[N];
}
一些结果:
myFunction(new int[] { 1, 3, 2, 0, 10 }, 0); //returns 4 (index of 10)
myFunction(new int[] { 1, 3, 2, 0, 10 }, 1); //returns 1 (index of 3)
myFunction(new int[] { 1, 3, 2, 0, 10 }, 2); //returns 2 (index of 2)
Array.Sort
。 - Daan Wilmer