排序算法主要分为:插入排序,选择排序,交换排序,堆排序,基数排序等。本文想将这些排序写成一个系列,算法是按照自己的思路写的,没有把它作为教材的意图。水平一般,力图说的直白,易懂。
首先从插入排序写,第一篇是直接插入排序。
直接插入排序的思想简单说一下。将一个无序的数组a[n]看成两部分:有序表和无序表,通常是讲第一个元素a[0]作为有序表,a[1,..,n-1]是无序的。
排序开始:从i = 1,...n-1遍历,首先比较a[1] 与a[0]的大小(递增排列)a[1]>a[0],说明把a[1]从无序表中放入有序表中时,有序表内元素不需要移动,有序表变成{a[0],a[1]}。如果a[1] < a[0],说明有序表的元素应该是{a[1],a[0]},这就需要移动(大数往后移动,小数往前站),将a[1]存入临时变量,把a[0]放入a[1]的位置(a[0]往后撤一步),然后把临时变量里存的a[1]放到a[0]中,第一次遍历结束。红色表示元素是有序表中的元素,黑色表示是无序表的元素。
i 0 1 2 3 4 5
初始序列 21 25 3 *25 16 08
第一趟 21 25 3 *2