我有以下程序通过数组创建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/

10-16 03:38