排序算法review<1>--直接插入排序
简单插入排序的基本思想:对于原待排序记录中的第i(1<=i<=n-1)个元素Ki,保证其前面的i个元素已经是有序的,要在这前i个元素(K0--Ki-1)中找到合适的位置将第i个元素插入,具体的方法是:将Ki与Ki-1,Ki-2,.....,K0比较,找到应该插入的位置,从该位置到第i-1个位置的元素后移哟个位置,将空出的位置插入Ki。
实例:待排序整形关键字序列为0 9 8 7 4 3 2 1 6 5 ,直接排序过程如下:
第一趟(i = 1 ):[0] 9 8 7 4 3 2 1 6 5
第二趟(i = 2 ):[0 9] 8 7 4 3 2 1 6 5
第三趟(i = 3 ):[0 8 9] 7 4 3 2 1 6 5
第四趟(i = 4 ):[0 7 8 9] 4 3 2 1 6 5
第五趟(i = 5 ):[0 4 7 8 9] 3 2 1 6 5
第六趟(i = 6): [0 3 4 7 8 9] 2 1 6 5
第七趟(i = 7): [0 2 3 4 7 8 9] 1 6 5 第八趟(i = 8): [0 1 2 3 4 7 8 9] 6 5
第九趟(i = 9): [0 1 2 3 4 6 7 8 9] 5第十趟(i = 10) : [0 1 2 3 4 5 6 7 8 9]
具体实现算法:
template <class T> void insert_sort(T array[],int n) { int i,j; for(i = 1;i<n;i++) { T temp = array[i]; for(j = i-1;j >= 0;j --) { if(temp<array[j]) { array[j+1] = array[j]; } else break; } array[j+1] = temp; }其时间复杂度为O(n^2)量级;为稳定的排序算法。