插入排序_希尔排序

思想:先对待排序记录进行宏观调整,再进行微观调整。宏观指:将记录序列分成若干个子序列,分布对每个序列进行插入排序。

程序代码:

  void ShellInsert(Elem R[],int dk)

  {

    for(i = dk+1; i < R.length; i++)

      if(R[i-dk] > R[i])

      {

        R[0] = R[i];

        for(j = i - dk;(j > 0) && (R[0] < R[j]); j -= dk)

          R[j+dk] = R[j];

        R[j+dk] = R[0];

      }

  }

  void ShellSort(Elem R[],int delta[],int t)  //增量为delta[]的希尔排序

  {

    for(k = 0;k < t;k++)

      ShellInsert(R,delta[k]);      //一趟增量为delta[k]的希尔排序

  }

时间复杂度:平均比较次数和平均移动次数都是O(n1.3)左右。

稳定性:不稳定。   

posted @ 2012-09-12 21:02  毛毛hhmm  阅读(156)  评论(0编辑  收藏  举报