1.原址插入排序
注意:算法导论中的数组下标从1开始,C程序中是从0开始的。
void insertion_sort(int A[], int length)
{
int i, j;
int key;
for(j = 1; j < length; j++)
{
key = A[j];
i = j - 1;
while(i >= 0 && A[i] > key)
{
A[i+1] = A[i];
i--;
}
A[i+1] = key;
}
}
2.递归插入排序
void insertion(int A[], int length){
if(length > 1){
int key = A[length-1];
int i = length-2;
while(i >= 0 && A[i] > key){
A[i+1] = A[i];
i--;
}
A[i+1] = key;
}
}
void recursive_insertion_sort(int A[], int length){
if(length > 1){
recursive_insertion_sort(A, length-1);
insertion(A, length);
}
}
3.插入排序算法改进(二分查找插入排序)
就是把A[j]与前面的元素A[1..j-1]反序扫描比较得到插入A[j]的位置改为二分查找得到插入A[j]的位置。(比较简单不再赘述)