算法导论(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;
	}
}
原文地址:https://www.cnblogs.com/ql698214/p/5426695.html