头文件是三个插入排序的代码,mian函数是一个测试样例
在第i轮,看的是第i+1个数据(位序)要插入在前面i个数据已经排好序的序列的哪个位置
每次就是比较第j位(j=i-1;j>=0;j--)要是还是比这个小,就直接让j位的值移动到j+1位置上去,直到比下一位要大停止,并将之放在这个位置上
(从位序为2的开始第一轮)
insertsort3.h
#pragma once
//直接插入排序(无哨兵)
//这种是最常规的,数组0位置无哨兵(数组是0~length-1)。没有涉及二分查找
template<typename DataType>
void insertSort(DataType D[], int length) {
DataType key;
int i, j;
for (i = 1; i < length; ++i) {//算法从第二个开始
if (D[i] < D[i - 1]) {
key = D[i];
for (j = i - 1; j >= 0 && key < D[j]; --j)//因为无哨兵在查找的过程中需要每次多判断 j是否超出0
D[j + 1] = D[j];
D[j + 1] = key;//小心这里