插入排序

发布时间 2023-11-05 23:42:27作者: 刘倩_网安2211

目录

算法

将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列
从头到尾依次扫描未排序序列,将扫描到的每个未排序元素插入有序序列的适当位置。

就像给一副扑克牌排序,取第一张作为排序的开始,从剩下的牌中取第二张,并把它以恰当的位置插入已经排过序的牌(这时的已排序的牌只有第一张)中,以此类推,把剩下未排序的牌插入以排过序的牌中

代码

int a[100] = { 29,10,14,37,14 };
    int n = 5;
    int i, j, key;
    for (i = 1; i < n; i++) //第一个待排序元素
    {
        key = a[i];//待插入元素
        j = i - 1;
        while ((j >= 0) && (a[j] > key)) //遍历已排序序列,直到待插入元素找到应有位置
        {
            a[j + 1] = a[j];//若待插入元素小于此元素,就将此元素后移一位
            j--;
        }
        a[j + 1] = key;//待插入元素找到应有位置,插入。
    }

流程图

将第一个元素标记为已排序

1.对于每一个未排序的元素 X,“提取” 元素 X

将x与前面已排序过的元素比较

x<a[0],则a[0]后移一位

此时已排序序列遍历完成,x插入a[0]。

2.再“提取” 未排序元素 X

将x与前面已排序过的元素a[1]比较

x<a[1],则a[1]后移一位

再与a[0]比较,a[0]<x,a[0]不动

x插入a[1]

3.以此类推