算法导论(3)插入排序
#pragma once /* 插入排序算法,相当于抓牌时,手里的牌都是已经排序好的,新抓起的牌从右向左依次和手里的牌进行比较 每比较依次都要后移一位多出一个空位,以便新牌插入到正确的位置 */ template<class T> void InsertSort(T *src, int length) { for (int j = 1; j < length;j++) { T key = src[j]; //待插入的牌 //将src[j]插入到src[j-1]-src[0] int i = j - 1; while (i >= 0 && key < src[i]) { //待插入的牌小于手中标号为i的牌 src[i + 1] = src[i]; //说明这张牌还要继续向前插入,于是前面挪出一个位置 i--; //继续和前面一张进行比较 } //退出循环的条件是i减小到-1,或者是key大于src[i] src[i + 1] = key; } }
henry