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

8 просмотров

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

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

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

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
В дельфе нет никакого коробочного (без установки третьих либ) способа получить CallStack с расшифровкой отладочных символов?
notme
7
Приветики всем!)) Подскажите: есть функция, которая записывает число типа Cardinal в четыре байта, хранимые в TBytes. Можете помочь мне, показав, как должна выглядеть функци...
Моринаро
5
Карта сайта