メモログ

TypedArray.prototype.sort について

前回の「Array.prototype.sort について」に引き続き、今度はTypedArraysortについて。実装は別だけど対応は基本的に同じなので簡単に。

Chrome の実装はtyped-array.tqあたりで、Quicksort が使われている。compareFunction がない場合は、TypedArraySortFastが実行され、この実行の内部では C++の std:sort が使われている。

Firefox の実装はTypedArray.jsあたりで、Quicksort が使われている。merge sort ではなく quicksort なのはおそらく TypedArray は数値のみなので stable であることを気にかける必要がないからだと思う(たぶん)。compareFunction がない場合は、8 ビット長の場合は CountingSort、16・32 ビット長の場合は RadixSort が使われている。

Safari の実装はTypedArrayPrototype.jsあたりで、merge sort が使われている。compareFunction がない場合は@typedArraySortが使われるのだけど、実装がどこにあるのか見つけられなかった。

Microsoft Edge の実装はTypedArray.cppあたりで、Quicksort が使われている。

TypedArray の sort でも同様に O(n log n)を期待できる。

以上。

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。