直接插入排序的比较次数和移动次数
问题是,当排序列中记录按非递增有序序列排列时,总比较次数为(n+2)(n-1)/2,移动次数为(n+4)(n-1)/2
我把n带进去怎么都不觉得对。
//数据类型如下typedef int KeyType;typedef struct{ KeyType key; InforType otherinfo;}RedType;typedef struct{ RedType r[MAXSIZE+1];//r[0]为哨兵单元 int length;}Sqlist;//直接插入排序void InsertSort(SqList& L){ for(i = 2; i <= L.length;++i){ if(L.r[i].key < L.r[i-1].key){ L.r[0] = L.[i];//哨兵 L.r[i] = L.r[i-1]; for(j = i-2;L.r[0]<L.r[j].key;--j){//移动 L.r[j+1] = L.[j]; } L.r[j+1] = L.r[0];//插入到正确的位置 } }}简单来说,对于序列 0 12 11 10 9过程如下:0 12 11 10 9 11 12 11 10 9 11 12 12 10 9 11 11 12 10 9 i j 移动1次10 11 12 10 9 10 11 12 12 9 10 11 11 12 9 10 10 11 12 9 i j 移动一次 移动一次9 10 11 12 9 9 10 11 12 12 9 10 11 11 12 9 10 10 11 12 9 9 10 11 12 i j 移动一次 移动一次 移动一次总共才移动6次,对于n=4来说。