- 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
/**
* Сортирует массив, используя рекурсивную сортировку слиянием
* up - указатель на массив, который нужно сортировать
* down - указатель на массив с, как минимум, таким же размером как у 'up', используется как буфер
* left - левая граница массива, передайте 0, чтобы сортировать массив с начала
* right - правая граница массива, передайте длину массива - 1, чтобы сортировать массив до последнего элемента
* возвращает: указатель на отсортированный массив. Из-за особенностей работы данной реализации
* отсортированная версия массива может оказаться либо в 'up', либо в 'down' // <--- ГОВНО
**/
int* merge_sort(int *up, int *down, unsigned int left, unsigned int right)
{
if (left == right)
{
down[left] = up[left];
return down;
}
unsigned int middle = (unsigned int)((left + right) * 0.5); // <--- ГОВНО, нахуй сюда плавучих питухов пихать?
// И что еще за unsigned int? Даешь uintptr_t.
// И если указатели будут 64-битные, то плавучий питух может обосраться на больном размере массивов
// разделяй и сортируй
int *l_buff = merge_sort(up, down, left, middle);
int *r_buff = merge_sort(up, down, middle + 1, right);
// слияние двух отсортированных половин
int *target = l_buff == up ? down : up;
unsigned int width = right - left, l_cur = left, r_cur = middle + 1;
for (unsigned int i = left; i <= right; i++)
{
if (l_cur <= middle && r_cur <= right)
{
if (l_buff[l_cur] < r_buff[r_cur])
{
target[i] = l_buff[l_cur];
l_cur++;
}
else
{
target[i] = r_buff[r_cur];
r_cur++;
}
}
else if (l_cur <= middle)
{
target[i] = l_buff[l_cur];
l_cur++;
}
else
{
target[i] = r_buff[r_cur];
r_cur++;
}
}
return target;
}
j123123 05.11.2016 07:43 # 0
bormand 05.11.2016 07:45 # 0
2^52 это действительно больной размер массива...
j123123 05.11.2016 07:52 # 0
У unsigned int лимит поменьше будет на большинстве платформ
barop 05.11.2016 14:55 # −63
Ну только если не huge конечно
huesto 05.11.2016 15:12 # 0
barop 05.11.2016 15:15 # −63
Gay 05.11.2016 16:22 # 0
barop 05.11.2016 16:44 # −64
guest 05.11.2016 16:46 # 0
Тот с утра ебет коней
Gay 05.11.2016 16:55 # −1
barop 05.11.2016 17:16 # −64
barop 06.11.2016 20:31 # −63
3_dar 05.11.2016 10:37 # 0
P.S. Слашал слухи что гугл судился с разработчиками Java, что у них наебнулся бинарный поиск из-за переполнения инта.
guest 05.11.2016 11:58 # 0
3_dar 06.11.2016 11:08 # +1
barop 06.11.2016 20:31 # −63
_____ 05.11.2016 13:53 # 0