002插入排序
一、算法介绍
插入排序是将一个数插入到已排好序的有序表里。如同打扑克时,将摸到的牌和手上的牌比较大小,然后插入到合适的位置。
其基本思想是,假设前n-1个数已排好序,插入第n个数时,从第n-1个数开始,从后向前依次与第n个数进行比较,直到找到其应该插入的位置将其插入。照此方法对后面的所有数进行插入,从而使整个序列变得有序。
二、算法分析
在得到一个数组后,把第一个数看作有序序列,即从第二个数开始进行插入。进行操作时,先把要插入的数拿出来,在原来的位置留一个空,再依次向前遍历,如果遇到前面的数比要插入的数大,就向后移动填补空位。直到前面的数全部遍历完,或者前面的数小于等于要插入的数(由于前面的数已排好序,所以无需再比较)。此时,把拿出来的数填在遍历位置的前一个位置。
如图所示
三、算法代码
void InsertSort(int a[], int n)
{
int i, j, x;
for(i=1; i<n; i++)
{
x = a[i];
j = i-1; //从之前一个数开始遍历
while(j>=0 && a[j]>x)
{
a[j+1] = a[j];
j--;
}
a[j+1] = x; //拿出来的数填在当前位置之前
}
}
运行结果