插入类排序的基本思想:每一步将一个待排序元素按其值的大小插入到已派序序列的适当位置上,直到待排序元素插入往为止
在插入排序过程中,由于寻找插入位置的方法不同又可以分为不同的插入排序法,这次介绍的是直接插入排序法
template<class T>
void insertionSort(T a[], int n)
{
int i, j;
T temp;
for (int i = 1; i < n; i++) //将下标为1到n-1的元素逐个插入已排序序列中适当的位置
{
int j = i;
T temp = a[i]; //从a[i-1]开始向a[0]方向扫描各元素,寻找适当位置插入a[i]
while(j > 0 && temp < a[j-1]) //逐个比较,直到temp>=a[j-1]时,j便是应插入的位置,若达到j == 0 ,则第一个元素是应插入位置
{
a[j] = a[j - 1]; //将元素逐个后移,以便找到插入位置可立即插入
j--;
}
a[j] = temp; //插入位置已找到,立即插入
}
}