希尔排序(C#下调试通过)

来源:互联网 发布:java 高并发框架 编辑:程序博客网 时间:2024/06/05 09:26

希尔排序是计算机科学家Donald L.Shell而得名。
希尔排序不像快速排序那么快。因为在最坏和最理想的情况下效率差别不算太多,所以稳定性比快速排序好一些。
间隔增量
Knuth间隔序列。
h=h*3+1递归调用可增至最大间隔数。
h=(h-1)/3可以减至起点。
当然还有别的序列方法:例如:h=(5*h-1)/11;
序列方案可以自己制定,但是更多的专家采用非对称互质的方法。但是这样也带来了一些问题,比如需要循环至起点又很麻烦,
反到影响了效能。
如下代码就有这样的难题,这个问题保留至此,以后碰上更好的方案在改。

  1.         ///   <summary>   
  2.         ///   希尔排序算法   
  3.         ///   </summary>   
  4.         ///   <param   name="lngArr" >传入的数组/param>   
  5.         public void shellSort(long[] lngArr)
  6.         {
  7.             int intOut = 0;
  8.             int intIn = 0;
  9.             int intElems = lngArr.Length;
  10.             int intFlam = 0;
  11.             while (intFlam <= intElems / 3)
  12.             {
  13.                 intFlam = intFlam * 3 + 1;
  14.             }
  15.             while (intFlam > 0)
  16.             {
  17.                 for (intOut = intFlam; intOut < intElems; intOut++)
  18.                 {
  19.                     long temp = lngArr[intOut];
  20.                     intIn = intOut;
  21.                     while (intIn > intFlam - 1 && lngArr[intIn -intFlam] >= temp)
  22.                     {
  23.                         lngArr[intIn] = lngArr[intIn -intFlam];
  24.                         intIn -= intFlam;
  25.                     }
  26.                     lngArr[intIn] = temp;
  27.                 }  // end for
  28.                 intFlam = (intFlam - 1) / 3;
  29.             }
  30.         }// end shellSort()