【发布时间】:2013-06-28 07:19:45
【问题描述】:
我需要一个float[] 进行排序。我需要知道旧索引在新数组中的位置。这就是为什么我不能使用Array.Sort(); 或其他什么。所以我想写一个函数来为我排序数组并记住它从哪个索引中获取每个值:
float[] input = new float[] {1.5, 2, 0, 0.4, -1, 96, -56, 8, -45};
// sort
float[] output; // {-56, -45, -1, 0, 0.4, 1.5, 2, 8, 96};
int[] indices; // {6, 8, 4, 2, 3, 0, 1, 7, 5};
数组的大小约为 500。我应该如何处理这个?什么排序算法等等。
解决后: C# 的强大总是让我感到惊讶。我什至不认为它能够自己完成这项任务。因为我已经听说
Array.Sort() 非常快,所以我会接受它。
【问题讨论】:
-
关于索引...保存输入列表,对输出进行排序,然后比较两者之间的索引不是更容易吗? float 和 int 之间的内存没有大小差异,因此不会占用任何内存。
-
@Tophe 你确定这是最快的方法吗?
-
不确定,也没有公认的答案那么巧妙。但是根据您需要获取原始索引的频率,实际比较索引可能更有效,而不是在创建时遍历每个列表 - 因为输入列表已经包含原始索引。这让你每次都少做一条指令。不过,您可能会以更流畅的方式获取其他方式的值。
标签: c# performance sorting primitive