算法基础--插入排序递归版

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]的位置。(比较简单不再赘述)

你可能感兴趣的:(algorithm)