C++ 希尔排序算法

来源:互联网 发布:java定时器 任务超时 编辑:程序博客网 时间:2024/04/30 08:21

   

 1.希尔排序的思想

             希尔排序是插入排序的一种优化,其思想为将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序。

      增量的选择上比较普遍是一半一半递减选取,10个数字无序序列,增量是len/2,然后不断缩短,最后一次增量为1.


  2.算法分析

          空间复杂度:O(1)

          时间复杂度 有人通过大量的实验,给出了较好的结果:当n较大时,比较和移动的次数约在nl.25到1.6n1.25之间。

    3.算法实现

void ShellSort(){int gap = len/ 2;//初始增量为数组长度的一半while (1 <= gap) {for (int i = gap; i < len ; i++) {int j = 0;int temp = iRawBuff[i];for (j = i - gap; j >= 0 && temp < iRawBuff[j]; j = j - gap){iRawBuff[j + gap] = iRawBuff[j];}iRawBuff[j + gap] = temp;}gap = gap / 2; 增量为上次的二分之一}for (int k = 0; k < len; k++){cout << iRawBuff[k] << "   ";}cout << endl;}


0 0