首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0003. 插入排序法(Insertion Sort)-穩定排序

日期:2023年 02月 19日

標籤: Algorithm Sort Paractical Algorithm C# Asp.NET Core

摘要:演算法-排序


時間複雜度(Time Complex): O(n^2)
空間複雜度(Space Complex): O(1) or O(n)
最佳時間: O(n)
最壞時間: O(n^2)
範例檔案:Source Code
範例專案:Code Project
基本介紹:本篇分為3大部分。
第一部分:插入排序 - 介紹
第二部分:圖解範例說明
第三部分:代碼






第一部分:插入排序 - 介紹

Step 1:原理

給定一組可比較陣列,遍歷
1. 起始由第2個元素(X)開始
2. 比對前(X-Y)元素
3-1. 前(X-Y)元素比當前X的值小,則進行元素往前遞移
3-2. 若(X-Y)元素沒有比當前x的值小,則Y=Y-1,繼續比對重複2.步驟,y直到到第1個元素完畢
3-3. X=X+1 再重複第2.步驟
最後排序將會由小至大

Step 2:演算法流程圖




第二部分:圖解範例說明

Step 1:以整數陣列為例

初始內有4個值,由第二個元素開始


第三部分:代碼

Step 1:插入排序代碼 - 呼叫進入點

輸入一組數列 inputItem 求出 result


public void Execute()
{
    List<int> inputItem = new() { 92, 17, 38, 59, 26, 39 };
    var insertionSort = new InsertionSort<int>();
    var result = insertionSort.InsertionAscendingSorting(inputItem);
}



Step 2:插入排序代碼 - 主程式

主要三個流程
1. 遍歷輸入陣列
2. 比較當前位置之前的所有的元素,比自己小的往前移動
3. 再往下一個位置,重複2.直到遍歷完畢


public class InsertionSort<T> where T : IComparable
{
    public List<T> InsertionAscendingSorting(List<T> items)
    {
        for (int keyIndex = 1; keyIndex < items.Count; keyIndex ++)
        {
            T keyValue = items[keyIndex];
            for (int index = keyIndex - 1; index >= 0; index--)
            {
                if (keyValue.CompareTo(items[index]) < 0)
                {
                    items[index + 1] = items[index];
                    items[index] = keyValue;
                }
                else
                    break;
            }
        }
        return items;
    }
}