簡體   English   中英

插入排序動態數組

[英]Insertion sort dynamic array

我正在嘗試編譯以下代碼:(通常是 get 和 set 操作)請協助檢查插入排序功能,其余所有編譯完美。 僅比較 2 個單元格的返回值(它是正確的)。
知道是什么原因造成的嗎?

  private static void Main()
    {
        IArray<int?> arr = Read();
        Console.WriteLine(arr);
        SelectionSort(arr);
        Console.WriteLine(arr);
        if (arr.Length >= 2)
        {
            arr.Set(arr.Length - 2, null);
            Console.WriteLine(arr);
        }
        if (arr.Length >= 1)
        {
            arr.Set(arr.Length - 1, null);
            Console.WriteLine(arr);
        }
        SelectionSort(arr);
        Console.WriteLine(arr);
        Console.WriteLine("(" + arr.Get(100) + ")");
        Console.WriteLine("insertion sort");
        int n = arr.Length;
        Insertionsort(arr, n);
        Console.WriteLine(arr);
        //// throw exception
        //_ = new DynArr<int>();
    }

    private static IArray<int?> Read()
    {
        var arr = new DynArr<int?>();
        Console.Write("Enter size >> ");
        var size = int.Parse(Console.ReadLine().Trim());
        for (var i = 0; i < size; ++i)
        {
            Console.Write("Enter [" + i + "] >> ");
            arr.Set(i, int.Parse(Console.ReadLine().Trim()));
        }
        return arr;
    }

    }
    private static void Insertionsort(IArray<int?> arr, int n)
    {
        for (int i = 1; i < n; i++)
        {
            var j = i - 1;
            voidcompare(arr, i, j);
          

        }
    }
    private static void voidcompare(IArray<int?> arr, int i, int j)
    {
        var c = arr.Get(i);
        while (j >= 0 && arr.Get(j) > c)
        {
            arr.Set(j + 1, c);
        }
       
    }
}

}

你的排序算法。 不正確。 看看它是如何工作的 - 插入排序 下面我為您提供一個可能的實現。

public class Program
{
    static void Main()
    {
        var collection = new List<int?> { 25, 71, 43, -1, 15, 0, 38 };

        DoInsertionSort(collection, collection.Count);

        Console.WriteLine(string.Join(Environment.NewLine, collection));
    }

    static void DoInsertionSort(IList<int?> collection, int length)
    {
        if (collection is null || collection.Count == 0 || length <= 0 || length > collection.Count)
        {
            return;
        }

        var previous = default(int?);

        for (int index = 0; index < length; index++)
        {
            var current = collection.Get(index);

            if (current < previous)
            {
                SwapUpToStart(collection, current, index);
            }

            previous = collection.Get(index);
        }
    }

    private static void SwapUpToStart(IList<int?> collection, int? current, int currentIndex)
    {
        for (int index = currentIndex - 1; index >= 0; index--)
        {
            var previous = collection.Get(index);

            if (current >= previous)
            {
                break;
            }

            collection.Swap(index, current, previous);
        }
    }
}

public static class YourIArray_T_Implementation
{
    public static int? Get(this IList<int?> collection, int index)
    {
        return collection[index];
    }

    public static void Swap(this IList<int?> collection, int index, int? current, int? previous)
    {
        collection[index] = current;
        collection[index + 1] = previous;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM