
Contents
実行環境
昨日と同様、Windows»
処理の中心部分
ソートも昨日と同様、浅野・和田・増澤『アルゴリズム論』(オーム社,// 配列からヒープを作成 TestHeap.prototype.build2 = function () { var h = this.ary.concat(), len = h.length, ord_start = Math.floor(len / 2) - 1; for (var i = ord_start; 0 <= i; i--) this.arrange3(i, len, h); this.heap_init = h; };
// ヒープをソート(降順) TestHeap.prototype.sort1 = function () { this.heap_sorted = this.heap_init.concat(); // 元ヒープを新しい配列にコピー var h1 = this.heap_init.concat(), h2 = this.heap_sorted, len = h1.length - 1, last = null; for(var i = 0; i <= len; i++) { h2[i] = h1[0]; // 元ヒープの頂点の値を、新しい配列にコピー if (i === len) break; last = len - i; h1[0] = h1[last]; this.arrange3(0, last, h1); } };
// ヒープの任意ノードから下へ下へ辿って整形する関数 TestHeap.prototype.arrange3 = function (ord, last, h) { var below = 2 * (ord + 1) - 1; if (last < below) return; var vc = h[ord], // value current vb = h[below], // value below vr = h[below + 1]; // value right below if (below < last && vb < vr) { below++; vb = vr; } if (vc < vb) { h[ord] = vb; h[below] = vc; this.arrange3(below, last, h); // 再帰呼び出し } };
ソース
要素数 100 万での処理時間
昨日と同様、元の配列は一様分布乱数で、だいたい均等(例えば要素数
# Chrome Portable 43 heap initial : check (OK), time (16ms) heap sorted : check (OK), time (334ms) heap initial : check (OK), time (17ms) heap sorted : check (OK), time (335ms) heap initial : check (OK), time (17ms) heap sorted : check (OK), time (337ms) heap initial : check (OK), time (18ms) heap sorted : check (OK), time (333ms) heap initial : check (OK), time (19ms) heap sorted : check (OK), time (603ms)
ヒープ作成がだいたい
続いて

# Firefox Portable 40 heap initial : check (OK), time (17ms) heap sorted : check (OK), time (291ms) heap initial : check (OK), time (19ms) heap sorted : check (OK), time (294ms) heap initial : check (OK), time (18ms) heap sorted : check (OK), time (292ms) heap initial : check (OK), time (26ms) heap sorted : check (OK), time (555ms) heap initial : check (OK), time (19ms) heap sorted : check (OK), time (294ms)
↓ 最後に

# Internet Explorer 10 heap initial : check (OK), time (24ms) heap sorted : check (OK), time (412ms) heap initial : check (OK), time (24ms) heap sorted : check (OK), time (421ms) heap initial : check (OK), time (23ms) heap sorted : check (OK), time (419ms) heap initial : check (OK), time (24ms) heap sorted : check (OK), time (421ms) heap initial : check (OK), time (24ms) heap sorted : check (OK), time (418ms)
初歩的ですがヒープの扱いが分かったので、次は