Insertion Sort

虽然插入排序在处理数据很大时效率不是很好,但它仍然有些优点:

  • 非常容易实现,代码量非常小
  • 当数据量很小时,效率很高
  • 当需排序的数据多数已经是排好的时,效率很好
  • 实践上,比其它N^2排序算法(如选择排序、冒泡排序)效率要好
  • 排序是稳定的
  • 所需额外内存空间是固定且很小(In-place algorithm)
  • Online algorithm

Insertion Sort

这是个非常简单的算法啦,下面是思路

  • 从第2个元素开始从左向右遍历
  • 用一个变量记住当前元素(它可能会被前面小于它的元素覆盖而不可得)
  • 从右向左进行内层遍历,如果元素比当前元素大就右移一位
  • 将当前元素插入到最后被移动的元素位置,结束内层遍历

用C语言表达如下:

void insertion_sort(int a[], const int size)
{
    int i, j, key;
    for (j = 1; j < size; ++j)
    {
        key = a[j];
        i = j - 1;
        while (i >= 0 && a[i] > key)
        {
            a[i + 1] = a[i];
            i -= 1;
        }
        a[i + 1] = key;
    }
}

参考: wikipedia: Insertion Sort