插入排序之直接插入排序
1. 基本原理:
(1) 从数组第一个元素开始,该元素可默认是排好序的;
(2) 取下一个元素,在已经排好的序列中从后向前扫描;
(3) 若该元素(有序序列)大于新元素,将该元素移到下一位置;
(4) 重复(3),直到已排序的元素不大于新元素位置,将新元素插入到该元素的下一位置
(5) 重复(2)、(3)、(4)步骤
2. 直接插入排序复杂度:
空间复杂度为O(1)
最好时间复杂度为O(n)
最坏时间复杂度为O(n²)
平均时间复杂度为O(n²)
3. 直接插入排序图表演示:

4. 总结:
(1) 适用于有部分数据已经有序,有序部分越大越有利;
(2) 输入数据规模大于1000的,不建议使用插入排序;
(3) 插入排序是一种稳定的算法。
5. C#代码实现:
class Program
{
static void Main(string[] args)
{
// 待排序数组
int[] sortArray = { 2, 8, 3, 5, 7, 1, 4, 6, 9 };
// 直接插入排序
InsertSort(sortArray);
}
/// <summary>
/// 直接插入排序
/// </summary>
/// <param name="sortArray">待排序数组</param>
private static void InsertSort(int[] sortArray)
{
for (int i = 1; i < sortArray.Length; i++)
{
for (int j = i; j > 0; j--)
{
if (sortArray[j] < sortArray[j - 1])
{
int temp = sortArray[j];
sortArray[j] = sortArray[j - 1];
sortArray[j - 1] = temp;
}
}
ShowSortResult(sortArray);
}
}
/// <summary>
/// 排序结果展示
/// </summary>
/// <param name="bubbleArray">排序数组</param>
private static void ShowSortResult(int[] sortArray)
{
for (int k = 0; k < sortArray.Length; k++)
{
Console.Write(sortArray[k] + " ");
}
Console.WriteLine();
}
}
6. 运行结果:


浙公网安备 33010602011771号