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 ответов

20 просмотров

Любой написаный тобой код будет медленнее чем 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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта