【发布时间】:2015-12-21 12:26:51
【问题描述】:
我想要一个更快的函数来找到 C# 中 Int 数组的第 N 个最大数。此函数接受 N 和 Array 并返回该数字的 index。
这是我已经拥有的。它只是对数组进行排序,然后返回该数字的索引。 效果很好,但我不确定这是否是最快的方法。没有完全排序的算法似乎是合乎逻辑的。
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。 -
你的排序是 n^2,所以显然不是,它不是最快的。
-
@FᴀʀʜᴀɴAɴᴀᴍ,对不起题外话,但是你是怎么用这种方式命名你的名字的?我怎样才能以同样的方式设计我的风格?
-
@TaReQMahMooD 老实说,我也不得不为那个东西搜索很多(相信我)。我发现它被称为小型股。 -> Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ