插入排序

3

数据

  • 平均时间复杂度:O(n^2)

  • 最好时间复杂度:O(n)

  • 最坏时间复杂度:O(n^2)

  • 空间复杂度:O(1)

  • 排序方式:In-Place

  • 稳定性:稳定

描述

每次从无序区中选择的元素,插入到有序区里合适的位置(打扑克)

动图

C#实现

public class InsertSort
{
    public static void Sort<T>(IList<T> list, Func<T, T, bool> compare)
    {
        if (list.Count < 2)
        {
            return;
        }

        for (int i = 1; i < list.Count; i++)
        {
            var checkIndex = i;
            for (int j = i - 1; j >= 0; j--)
            {
                if (compare(list[checkIndex], list[j]))
                {
                    SortHelper.Exchange(list, checkIndex, j);
                    checkIndex = j;
                }
                else
                {
                    break;
                }
            }
        }
    }
}

Lua实现

function InsertSort(list, compareFunc)
    local count = #list
    if count < 2 then
        return
    end
    for i = 2, count do
        local checkIndex = i
        for j = i - 1, 1, -1 do
            if compareFunc(list[checkIndex], list[j])  then
                Exchange(list, checkIndex, j)
                checkIndex = j
            else
                break
            end
        end
    end
end