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}

我的数组是双[]。

C#首先对数组进行排序和搜索,然后显示相关数组的相应值

第一件事;像这样的链接数组表明,如果你对问题进行不同的建模,你可能会发现它更容易。例如,如果数组是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)(两者都摊销了)。