我有以下程序通过数组创建100个随机元素。
那100个随机值是唯一的,每个值仅显示一次。
虽然使用线性搜索,但它会一直查找整个数组。
我如何才能获得锯齿状的阵列,使其仅“扫描”剩余的位置? (假设我将表格的最大元素数保持为100,因此,如果生成一个随机值,则数组将包含99个具有线性搜索扫描等功能的元素,并处于打开状态……)
我认为我必须在FoundLinearInArray中的某个地方对锯齿状的数组进行破坏?
希望这能带来任何意义。
问候。
private int ValidNumber(int[] T, int X, int Range)
{
Random RndInt = new Random();
do
{
X = RndInt.Next(1, Range + 1);
} while (FoundLinearInArray(T, X));
return X;
}/*ValidNumber*/
private bool FoundLinearInArray(int[] A, int X)
{
byte I = 0;
while ((I < A.Length) && (A[I] != X))
{
I++;
}
return (I < A.Length);
}/*FoundInArray*/
public void FillArray(int[] T, int Range)
{
for (byte I = 0; I < T.Length; I++)
{
T[I] = ValidNumber(T, I, Range);
}
}/*FillArray*/
最佳答案
如此看来,您好像要填充数组,并且要保证其中的每个项目都是唯一的?如果是这样,请将您生成的每个数字放入哈希集中。哈希集上的查找为O(1)(或对数)-您可以在其中放入一百万个项目,并且仍然具有极高的性能查找。
关于c# - 带锯齿阵列的线性搜索?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2426442/