Сейчас весь ДжаваСкрипт тяжело вздохнул... Он же не зря называется функциональным языком! Юзай функции. Это их первое призвание вообще, избавлять код от повторений. — VostokSisters47 secs ago
я конечно благодарен, но я вообще не понимаю нахрена вы превращаете замечательный язык программирования в нечитаемую кашу в которой хрен разберёшься, это убого, ломает мозг, глаза и всё удовольствие от программирования. но зато можно выпендриваться, не спорю. — Khipster6 mins ago
@vp_arth нет, он ненормально выглядит. 1 - оно работает за n log n а не за n. 2 - почему оно вообще работает? Напишите такое в С++ получите выход за границу массива из-за нарушения контракта на оператор сравнения.
@vp_arth По контракту сравнение должно гарантировано (а) возвращать одинаковый результат для одних и тех же значений, (б) быть антисимметричным, иррефлексивным и транзитивным
@vp_arth мы куда-то сошли с темы :) это всё равно по идее не доказывает, что одна и та же пара не будет сравниваться дважды
даже если такой алгоритм и применяется
тем более, если сравнение «плавает», то элемент, который при сравнении оказался меньше, чем пивот, может при следующем сравнении оказаться больше, так что массив выйдет неотсортированным
ну, мы сравниваем с пивотом, и допустим, что элемент получился меньше. мы отсюда делаем вывод, что его можно поместить в «левую» группу, и он будет меньше всех элементов правой группы
The following program, a simple vector sorting one, crashes for t >= 17 at the second sort invocation. First sort succeeds even for t == 100.
Struggled for quite some time but I'm not able to figure out what is wrong. Can someone please help me?
I've tried it on a MacBook Air as well as a linux ...
To expand on 500 Internal Server Error's (correct) answer, Quicksort requires a well-behaved comparison function. You are required to provide a comparison that:
is reflexive: an item must compare equal to itself
is antisymmetric in inequality: if A is greater than B then B must also be smaller...
Это примеры к тому, что квиксорт имеет право крешнуться
bool sort_cmp( int a, int b )
{
return true;
}
vector<int> tv = {1, 2, 3, 4, 5};
int main()
{
sort( tv.begin(), tv.begin()+5, sort_cmp); // ## This one works even for t == 100.
for (int i : tv) {
cout << i;
}
return 0;
}
@vp_arth Ну, мне не кажется, что реализация сортировки в gcc кривая. Если использовать не по назначению, имеет право не работать. Оттого, что микроскоп плохо забивает гвозди, он не становится плохим.
@vp_arth ну, она делает tv[i] = i + 1
чтобы не заполнять вручную
помните анекдот про чукотских рабочих и японскую бензопилу?
@vp_arth ну, квиксорт как алгоритм тоже бывает с вариациями, например, тот же выбор пивота. в любом случае, предпочитают быстрый алгоритм, а для шаффла используют std::random_shuffle
@VladD это понятно, что nlogn в общем случае использовать дурость, даже если бы работало. Но в javascript на массиве из 5ти элементов считаю это нормальным
@avp ладно, приятно было поболтать, ребята) Я тут 5:22 на часах увидел... Ну нафиг, нет меня)