插入排序
(这里参考自 狄泰 数据结构课程)
-
基本思想
-当插入第 i (i >= 1) 个数据元素时, 前面 i-1 个数据元素已经排好序, 这时用 V[ i ] 的关键字与 前 i-1 个数据进行比较 找到位置后将位置上的对象往后移动.
看下图:
-
直接上代码:
template <typename T>
void Sort::Insert(T array[], int len, bool min2max)
{
for(int i = 1; i < len; i++) //这里从第一个元素开始是因为 第 0 个元素是不用排序或已经排好序
{
int m = i;
T tmp = array[i]; //记录待排元素
for(int j = i-1; j >= 0; j--) //从已排好序的序列的下一个元素开始
{
if(min2max ? (array[j] > tmp) : (array[j] < tmp))
{
array[j+1] = array[j]; //找到位置往后移动一位
m = j; //记录位置下标
}
else
{
break; //找不到位置就退出
}
}
if(m != i) //这里加判断是指 没找到位置没必要进行交换提高效率
array[m] = tmp;
}
}