169 похожих чатов

Пацаны, кто разбирается в MergeSort? Делим массив на две половины

(и сортируем их), через .sort ?
Что-то у меня медленнее на 10%, чем Array.prototype.sort

const shuffleArray = arr => {
const len = arr.length
for (let i = 0; i < len - 1; i += 1) {
let r = Math.floor(Math.random() * (len - i))
r && ([arr[i], arr[i + r]] = [arr[i + r], arr[i]])
}
return arr
}

const chaoticArray = shuffleArray(Array(20).fill(0).map((_, i) => i + 1))

const mergeSort = array => {
const pivot = (start, end) => Math.floor((start + end) / 2);
const len = array.length
let tempA = [...array]
let tempB = tempA.splice(pivot(0, len), len - 1)

tempA = tempA.sort((a, b) => a - b)
tempB = tempB.sort((a, b) => a - b)

let i = 0
let j = 0
let k = 0
const result = []

while (k < len) {
if (tempA[i] < tempB[j]) {
result.push(tempA[i])
i++
} else {
result.push(tempB[j])
j++
}
k++
}
return result;
}

17 ответов

19 просмотров

Любой написаный тобой код будет медленнее чем Array.prototype.sort

Danila
Любой написаный тобой код будет медленнее чем Arra...

От входных данных никак не будет зависеть?

jk
От входных данных никак не будет зависеть?

А должно? Нативный метод на то и нативный что написан не на жс и не тобой

🏴‍☠️- Автор вопроса

Некрасиво пишешь, пойдем по разам выйдем

🏴‍☠️
А написанный тобой?

И написаный мной тоже

🏴‍☠️- Автор вопроса
Danila
И написаный мной тоже

const shuffleArray = arr => { const len = arr.length for (let i = 0; i < len - 1; i += 1) { let r = Math.floor(Math.random() * (len - i)) r && ([arr[i], arr[i + r]] = [arr[i + r], arr[i]]) } return arr } const chaoticArray = shuffleArray(Array(20).fill(0).map((_, i) => i + 1)) const selectionSort = array => { for (let i = 0; i < array.length - 1; i += 1) { let min = i; for (let j = i + 1; j < array.length; j += 1) { if (array[min] > array[j]) min = j; } [array[i], array[min]] = [array[min], array[i]]; } return array } const mergeSort = array => { const pivot = (start, end) => Math.floor((start + end) / 2); const len = array.length let tempA = [...array] let tempB = tempA.splice(pivot(0, len), len) tempA = selectionSort(tempA) tempB = selectionSort(tempB) let i = 0 let j = 0 let k = 0 const result = [] while (k < len) { if (tempA[i] < tempB[j]) { result.push(tempA[i]) i += 1 } else { result.push(tempB[j]) j += 1 } k += 1 } return result; } console.log(mergeSort(chaoticArray))

Danila
А должно? Нативный метод на то и нативный что напи...

Ну просто у алгоритмов сортировки есть best case и worst case в зависимости от порядка элементов в исходном массиве. Если подогнать худшие данные под quicksort, или что там сейчас под капотом нативно, и написать алгоритм который такой порядок сортирует быстрее, то нет ли шансов в этом случае победить?

🏴‍☠️
const shuffleArray = arr => { const len = arr.le...

Ну и чего? Быстрее нативного?

🏴‍☠️- Автор вопроса
Danila
Ну и чего? Быстрее нативного?

на 20 элементов быстрее нативный, на 200 быстрее мой, на 1000 быстрее нативный

🏴‍☠️
на 20 элементов быстрее нативный, на 200 быстрее м...

На 200 элементах измерения не достоверны, особенно в жс

🏴‍☠️- Автор вопроса
🏴‍☠️- Автор вопроса
Danila
Ну то есть не быстрее

SelectionSort с вложенным циклом, можно другой алгоритм попробовать. у тебя есть в закладках какой-нибудь эффективный цикл сортировки?

🏴‍☠️- Автор вопроса
Jakhongir
На 200 элементах измерения не достоверны, особенно...

на 20 000 нативный сорт на 90% быстрее, ладно короче нет смысла тягаться с V8 Torgue Timsort

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта