插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。
我们准备用递归来实现,只用一层循环就够了, 外层循环用递归来实现。具体算法描述如下:
1)已经拍好序的元素的数量sorted=n-1, 直接返回,这是递归出口;
2)当前待排序的数放到 temp;
3)做一次循环依次比较,直到找到合适的位置j+1;
4) 将待排序的值放到j+1位置上
5)递归调用
具体代码如下:
void insert_sort(int value[], int n, int sorted)
{
if (sorted == n-1) return;
int temp = value[sorted+1];
int j = 0;
for (j = sorted; j >= 0 && value[j] > temp; j--)
value[j + 1] = value[j];//移动
value[j+1] = temp;//插入
insert_sort(value, n, sorted + 1);//递归调用
}
测试程序:
int a[10] = {10,9,8,7,6,5,4,3,2,1 };
insert_sort(a, 10, 0);