zoukankan      html  css  js  c++  java
  • 数据结构与算法之排序(4)希尔排序 ——in dart

            研究了网上大部分的希尔排序代码,发现大部分都是互相抄的——因为网上甚至某些书上的实现大部分都是错的。希尔排序是插入排序的升级版,通过引入间隔,然后分组进行插入排序。再逐步缩小间隔,直至间隔为1时,做全数组的插入排序。dart 代码如下:

     1 void shellSort<E extends Comparable>(List<E> a) {
     2   for (var i = _initInterval(a); i > 0; i = (i - 1) ~/ 3) {
     3     for (var g = 0; g < i; g++) {
     4       for (var j = i + g; j < a.length; j += i) {
     5         var k = j - i, t = a[j];
     6         while (k >= 0 && t.compareTo(a[k]) < 0) {
     7           a[k + i] = a[k];
     8           k -= i;
     9         }
    10         if (k < j - i) a[k + i] = t;
    11       }
    12     }
    13   }
    14 }
    15 
    16 int _initInterval<E>(List<E> a) {
    17   var interval = 1;
    18   while (interval < a.length ~/ 3) interval = interval * 3 + 1;
    19   return interval;
    20 }
  • 相关阅读:
    平板涂色
    速算游戏_NOI导刊2011提高(04)
    信息学奥赛一本通——配套刷题网站
    求10000以内n的阶乘
    大整数的因子
    计算2的N次方
    大整数加法
    带余除法
    A/B 高精度
    A*B 高静度
  • 原文地址:https://www.cnblogs.com/outerspace/p/10417966.html
Copyright © 2011-2022 走看看