首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

直接插入排序的比较次数和移动次数,该如何处理

2012-04-02 
直接插入排序的比较次数和移动次数问题是,当排序列中记录按非递增有序序列排列时,总比较次数为(n+2)(n-1)/

直接插入排序的比较次数和移动次数
问题是,当排序列中记录按非递增有序序列排列时,总比较次数为(n+2)(n-1)/2,移动次数为(n+4)(n-1)/2
我把n带进去怎么都不觉得对。

C/C++ code
//数据类型如下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来说。


[解决办法]
额,这个再仔细想想......

热点排行