插入排序

tech2024-12-02  9

1. 插入排序:InsertSort

1.1 插入排序的原理:

插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌

1.2 代码

using SortInterface; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SortItem { public class InsertSort : ISortItem { public override string SortTypeName { get { return "插入排序"; } } protected override void Sort(List<int> listNumber) { int i; int j; for (i = 1; i < listNumber.Count; i++) { int iTempNumber = listNumber[i]; j = i - 1; while (j>= 0&&iTempNumber < listNumber[j]) { listNumber[j + 1] = listNumber[j]; ChangeNumber(j + 1, listNumber[j]); j--; } listNumber[j + 1] = iTempNumber; ChangeNumber(j + 1, iTempNumber); } } } }

1.3 界面效果

1.4 时间复杂度&空间复杂度

1.4.1时间复杂度

在插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N- 1次,时间复杂度为。最坏的情况是待排序数组是逆序的,此时需要比较次数最多,总次数记为:1+2+3+…+N-1,所以,插入排序最坏情况下的时间复杂度为 。平均来说,A[1…j-1]中的一半元素小于A[j],一半元素大于A[j]。插入排序在平均情况运行时间与最坏情况运行时间一样,是输入规模的二次函数 。

1.4.2空间复杂度

插入排序的空间复杂度为常数阶 。

1.4.3稳定性分析

如果待排序的序列中存在两个或两个以上具有相同关键词的数据,排序后这些数据的相对次序保持不变,即它们的位置保持不变,通俗地讲,就是两个相同的数的相对顺序不会发生改变,则该算法是稳定的;如果排序后,数据的相对次序发生了变化,则该算法是不稳定的。关键词相同的数据元素将保持原有位置不变,所以该算法是稳定的 。

最新回复(0)