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

直接插入排序的比较次数跟移动次数

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

直接插入排序的比较次数和移动次数
问题是,当排序列中记录按非递增有序序列排列时,总比较次数为(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来说。


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

热点排行