- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
public class Sorting {
private static void swapElements(int[] arr, int index1, int index2) {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
public static void mergeSort(int[] arr) {
if (arr.length == 1) {
return;
}
final int temp = (arr.length % 2 == 0) ? arr.length / 2 : (arr.length + 1) / 2;
int[] left = new int[temp];
int[] right = new int[arr.length / 2];
System.arraycopy(arr, 0, left, 0, temp);
System.arraycopy(arr, temp, right, 0, arr.length / 2);
Sorting.mergeSort(left);
Sorting.mergeSort(right);
Sorting.mergeSortHelper(arr, left, right);
}
private static void mergeSortHelper(int[] arr, int[] left, int[] right) {
int L = 0, R = 0;
boolean Ltop = false, Rtop = false;
for (int i = 0; i < arr.length; i++) {
if (L < left.length - 1 && R < right.length - 1) {
if (left[L] <= right[R]) {
arr[i] = left[L];
L++;
} else {
arr[i] = right[R];
R++;
}
} else if ((L == left.length - 1) ^ (R == right.length - 1)) {
if (L == left.length - 1) {
if ((left[L] <= right[R]) && !Ltop) {
arr[i] = left[L];
Ltop = true;
} else {
arr[i] = right[R];
R++;
}
} else {
if ((right[R] <= left[L]) && !Rtop) {
arr[i] = right[R];
Rtop = true;
} else {
arr[i] = left[L];
L++;
}
}
} else {
if (i < arr.length - 1) {
arr[i] = (left[L] < right[R]) ? left[L] : right[R];
} else {
arr[i] = (left[L] > right[R]) ? left[L] : right[R];
}
}
}
}
roman-kashitsyn 31.08.2011 14:46 # +3
1. Зачем?
2. Почему так много?
3. Где дженерики? -> Где здесь java?
kaspvar 31.08.2011 14:53 # 0
2. Я б-кодер =(
3. До дженериков еще не дошел.
Esper 31.08.2011 15:20 # +1
И весь mergeSortHelper сомнителен, особенно название, else if и bool'и в нем. И не переименовать temp в middle?
roman-kashitsyn 01.09.2011 10:21 # −1
TarasB 31.08.2011 15:24 # +1
Esper 31.08.2011 17:35 # +1
roman-kashitsyn 31.08.2011 17:45 # 0
Irdis 31.08.2011 18:52 # 0
roman-kashitsyn 31.08.2011 21:13 # +3
Irdis 31.08.2011 22:37 # 0
Ни ifов ни циклов тебе.
roman-kashitsyn 31.08.2011 22:59 # 0
roman-kashitsyn 31.08.2011 23:06 # 0
Irdis 31.08.2011 23:43 # 0
Esper 01.09.2011 10:02 # +2
roman-kashitsyn 01.09.2011 15:29 # +1
Dummy00001 01.09.2011 01:35 # +5
отсутствие структур данных высокого порядка портит ИМО функциональные языки. уперлись ж религиозно в односвязные списки...
CPPGovno 01.09.2011 06:19 # 0
roman-kashitsyn 01.09.2011 06:59 # 0
Dummy00001 01.09.2011 12:23 # 0
когда видишь обычную FIFO у которой ассимптотическая производительность O(n) (best case O(1), но в случае FIFO это просто не случается, cue in zippers) то как подталкивает на размышления.
roman-kashitsyn 01.09.2011 12:44 # 0
Dummy00001 01.09.2011 13:06 # 0
roman-kashitsyn 01.09.2011 13:13 # 0
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_sec_3.3.2
Dummy00001 01.09.2011 13:52 # 0
нету в функциональных языках O(1) оператора для добавления элемента в конец списка.
единственное что придумали это зипперы - http://en.wikipedia.org/wiki/Zipper_%28data_structure%29 - но они предоставляют только амортизированую O(1).
roman-kashitsyn 01.09.2011 14:06 # 0
кто вам такое сказал? можно ссылку на источник? конструирование происходит только с помощью cons (и это операция O(1)), car и cdr - просто селекторы. Они нужны для обхода списка и никоим образом его не модифицируют (разве что только могут появиться объекты, пригодные для сборки мусора). Там же написано: "the queue operations to be implemented so that they require O(1) steps".
Dummy00001 01.09.2011 14:24 # 0
roman-kashitsyn 01.09.2011 14:35 # 0
Dummy00001 01.09.2011 15:28 # 0
лисп из всех этих языков наверное самый мощный, бо не пытается красивым теориям следовать, а остается просто практичным.
эрланг так же своей практичностью привлекателен (тем более что я работаю в телекомах) но вот той функциональной фигней, и тем что надо рано начинать думать о производительности (и не только о проце - но так же и о памяти) напрягает.
на хаскель после прочтения пару туториалов я забил, бо очень много теории и сказок о красоте программирования на хаскеле. субстанции очень мало.
а ведь все началась с простого поиска выразительного язычка для быстрого прототипирования...
roman-kashitsyn 01.09.2011 15:42 # 0
python?
Если бы Erlang был не функциональным, его модель акторов была бы в глубокой... яме.
Так-то я пишу на Java. Haskell изучаю ради новых идей... И чтобы свободнее себя чувствовать в Scala. Мне он кажется довольно практичным, но на освоение требуется уйма времени и практики. Хотя Lisp тоже доставляет. Жаль, времени мало на всё.
Dummy00001 01.09.2011 15:53 # 0
отсутствие варнингов + слабая типизация + общая тормознутость не самая лучшая комбинация, к сожалению.
перл иногда тормозит похлеще, но варнинги (что я может чего не то написал что я думал что я написал) кидает сразу. количество встроеных прямо в язык функций тоже как бы развращает: можно по тупому сложные (но вторичные) проблемы делать.
с перлом моя проблема только в том что иногда напишешь прототип, вроде коротко и работает нормально. а когда начинаешь это в С/С++ конвертить... страницы и страницы кода. эстимэйшены времени разработки на основе перловых прототипов делать в принципе невозможно.
roman-kashitsyn 01.09.2011 16:09 # +1
roman-kashitsyn 01.09.2011 13:28 # 0
какую, если не секрет?
Dummy00001 01.09.2011 13:39 # 0
SmackMyBitchUp 01.09.2011 13:52 # 0
wvxvw 02.09.2011 11:00 # 0
А так вообще можно? В смысле, одинаковое имя аргументов.
Irdis 02.09.2011 13:27 # 0
Синтерпретировано в Swi-Prolog
roman-kashitsyn 31.08.2011 17:57 # 0
Esper 01.09.2011 10:00 # 0
Dummy00001 01.09.2011 01:32 # 0
неоптимально, ну да и хер с ним. писал только что бы узнать сколько приблизительно строк (по сравнение с С вариантом) на Перле будет.
roman-kashitsyn 31.08.2011 15:32 # 0
Dummy00001 01.09.2011 02:12 # 0
другими словами: везде где важна ассимптотическая (не абсолютная!) производительность, все равно надо мерж сорт писать.
Fai 31.08.2011 18:29 # −6
Dummy00001 01.09.2011 02:14 # 0
на ГК не пройдет.
guest8 09.04.2019 11:25 # −999