C#首先对数组进行排序和搜索,然后显示相关数组的相应值
本文关键字:数组 显示 然后 排序 搜索 | 更新日期: 2023-09-27 17:59:25
我有多个数组,数组中的值需要逐列保持在一起。我想快速排序,然后二进制搜索第一个数组,然后根据对第一个数组的搜索显示其他数组的所有值。但是,如果我对第一个数组进行排序,那么其他数组中的值将不再位于正确的位置。
(示例,不是真实数据)未排序但正确的数据位置如下所示。
array1{5,2,3,1,4}
array2{6,9,1,7,8}
array3{2,4,1,5,4}
当对第一个数组进行排序时,它应该是这样的。
array1{1,2,3,4,5}
array2{7,9,1,8,6}
array3{5,4,1,4,2}
那么如果搜索到2,它应该这样显示。
array1{2}
array2{9}
array3{4}
我的数组是双[]。
第一件事;像这样的链接数组表明,如果你对问题进行不同的建模,你可能会发现它更容易。例如,如果数组是x、y和x坐标,那么您最好使用这样的类;
public class Point3d { public int x; public int y; public int z; }
然后按x对点数组进行排序;
Array.Sort(listOfPoints, (d1,d2) => d1.CompareTo(d2));
一般来说,这样排列表明你实际上已经有了垂直记录,你的代码可能会从这样处理中受益。
int index = 0;
// save original positions
var lookup = array.ToDictionary(x => x, x => index++);
// sort array
Array.Sort(array1);
foreach (var item in array)
{
int originalIndex = lookup[item];
... array2[originalIndex]
}
事实上,有了这个字典,就不需要对数组进行排序。它可以更快,因为构建字典是O(N),访问元素是O(1)(两者都摊销了)。