Pull to refresh

Comments 8

Cрыв покров: в V8 тоже используют быструю сортировку.
Не знаю, с чего вы срываете покровы, но быстрая сортировка используется далеко не везде.
В статье есть ссылка на исходный код SpiderMonkey, в котором используют сортировку слиянием. И если мне не изменяет память, то в настоящий момент в CPython и OpenJDK используется алгоритм Timsort.
А что же в них native, если они все тоже на javascript написаны? Это что же, v8 написан на v8? )
v8 компилирует js в нативный код. Для обычного кода это происходит не сразу, а для стандартной бибилотеки — сразу.
v8 не написан целиком на javascript, большинство составляющих (парсер, неоптимизирующий компилятор, оптимизирующий компилятор и др) написаны на C++. А вот стандартная библиотека написана на JS, и она компилируется в нативный код почти так же, как ваш «внешний» js код (только у вас нет доступа к native syntax, а в стандартной библиотеке он используется повсеместно).
На мой взгляд, в статье не хватает вот такого примера и объяснения почему этот код вернет {id: 6, order: 0}
function compare(a, b) {
  if (a.order > b.order) {
    return 1
  }
  if (a.order < b.order) {
    return -1
  }
  return 0;
}

var m = [{id: 1, order: 0}, {id: 2, order: 0}, {id: 3, order: 0}, {id: 4, order: 0}, {id: 5, order: 0}, {id: 6, order: 0}, {id: 7, order: 0}, {id: 8, order: 0}, {id: 9, order: 0}, {id: 10, order: 0}, {id: 11, order: 0}];

console.log(m.sort(compare)[0]);
Как раз в статье я указываю, что сортировка неустойчивая. Из неустойчивости и вытекает ваш пример.
Думаю будет полезно добавить ссылочку в саму статью на ваш комментарий, спасибо.
Sign up to leave a comment.

Articles