算法导论学习笔记(一)排序算法之插入排序

来源:互联网 发布:中国废除汉字知乎 编辑:程序博客网 时间:2024/05/22 14:06

插入排序是一种较为经典的排序算法,它的思想是将一个数插入到一组有序数列中,使得插入后的数列仍为有序数列。依据这一算法思想可以得出:在改数插入前和插入后,所在数列均为有序数组,所变化的只是数列的长度。

所以就产生了一个循环不变式:有序数列,插入新数,仍为有序数列,再插入……

算法导论上列举了如下伪代码

INSERTION-SORT(A)    for j = 2 to A.length        key = A[j]        //Insert A[j] into the sorted sequence A[1..j - 1].        i = j-1        while i>0 and A[i] > key            A[i+1] = A[i]            i = i-1        A[i+1] = key

内层循环while循环的作用是保持数列有序,而外层循环的作用是将新数逐个加入到有序数列中,由此完成算法。

代码片段如下

void insertSort(int *insertSortArray,int length){    for(int flag=1;flag<length;flag++){        int key = insertSortArray[flag];        int iteratorFlag = flag-1;        while(iteratorFlag >= 0 && insertSortArray[iteratorFlag] > key){            insertSortArray[iteratorFlag+1] = insertSortArarry[iteratorFlag];            iteratorFlag--;        }        insertSortArray[iteratorFlag+1] = key;    }}
0 0
原创粉丝点击