目录
目录算法
将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个未排序元素插入有序序列的适当位置。
就像给一副扑克牌排序,先取第一张作为排序的开始,再从剩下的牌中取第二张,并把它以恰当的位置插入已经排过序的牌(这时的已排序的牌只有第一张)中,以此类推,把剩下未排序的牌插入以排过序的牌中。
代码
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.以此类推