Penyortiran tidak stabil di JavaScript

Ketika saya melihat posting tentang topik serupa di jejaring sosial apa pun, hampir selalu ada banyak komentar seperti ini di bawahnya:

  • Mengapa Anda perlu mengetahui ini jika ada metode penyortiran bawaan?

  • Mengapa menemukan kembali roda?

  • Wawancara memang perlu, obyektif tidak perlu mengetahuinya lagi

  • Dalam "mesin javascript apa pun", mereka tidak bodoh, dan telah melakukan segalanya dengan benar

Dan saya sendiri dulu berpikiran sama, sampai saya bergabung dengan salah satu tim IT Rostelecom sebagai pengembang frontend. Bersama-sama kami menemukan kasus yang sangat menarik: perlu membuat widget yang dapat dibangun ke dalam sistem informasi semua cabang makro-regional kami dan menyederhanakan pekerjaan operator dalam memilih tarif yang optimal.

Langsung ke intinya

Menurut Anda, apa yang akan terjadi setelah kode ini dijalankan? Sementara itu, tidak perlu mengetahuinya. "

Sepertinya tidak ada yang aneh, tetapi ada nuansa.

Jumlah kasus kali

, , , unit-. - . . -, . , Node.js 10, , . , , . , β€” . , , , , .

. Node , Node, 11, . . Node 12, .

: Google Chrome 80 , 69 β€” . , . 

  • ,

  • Release notes Google Chrome 

  • , Google Chrome 69 β€” , 6- V8

  • Release notes V8

  • 6 7 V8

Getting things sorted in V8, , 7- V8 TimSort, QuickSort. , , - .

Node.js 10.22 ( V8 v6.8) QuickSort.​

​ , , 0.

Node.js 14.5 ( V8 v7.0) TimSort.​

​ .

? , JavaScript. Node.js , . 

, . BlockSort (wikisort). , , , , .

:

  • lodash.sortby

  • WikiSort javascript (WikiSort)

  • QuickSort V8 (node.js 10.22.0)

  • TimSort V8 (node.js 14.5.0)

10 , 100 . 

​

​ : , V8, WikiSort TimSort, . lodash

sort-test-js, β€” Tihon-Ustinov/sort-test-js

?

JavaScript

Node.js

11.0.0

2018-10-23

V8 7.0.276.28

+

Node.js

10.22.0

2020-07-21

V8 6.8.275.32

-

Google Chrome

70.0.3538

2018-10-16

V8 7.0.276

+

Google Chrome

69.0.3497

2018-09-04

V8 6.9.427

-

  • Β« JavaScriptΒ»,

  • ,

  • ,

  • , ,




All Articles