Size: a a a

2020 November 08

MS

Mikola Summer Duck in pro.algorithms
На самом деле я готов использовать больше памяти, но так чтоб зааллоцировать её заблаговременно и во время сортировки ничего дополнительно аллоцировать не пришлось. Массивы одинаковой длины.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
Mikola Summer Duck
Йо! Я хочу отсортировать элементы одного массива согласно элементам другого массива. Как мне это сделать в О(1) памяти (инплейс)?
А что не так с обычной heap sort?
источник

MS

Mikola Summer Duck in pro.algorithms
Массивы которые нужно отсортировать раздельные
источник

MS

Mikola Summer Duck in pro.algorithms
При этом ключ для сортировки находится только в одном из них.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
а как производится сопоставление изначальное - по индексах?
источник

MS

Mikola Summer Duck in pro.algorithms
Да, это ж массив.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
Mikola Summer Duck
Да, это ж массив.
Возьми новый массив, в котором изначально сохрани числа от 0 до n-1. Затем отсортируй эти величины(которые по факту индексы), используя значения из массива, по которому хочешь сортировать.

Затем перегрупируй изначальные эллементы в соответствии с полученной последовательностью индексов.
источник

MS

Mikola Summer Duck in pro.algorithms
А как перегруппировать так чтоб не разрушить массив индексов?
источник

MS

Mikola Summer Duck in pro.algorithms
Ведь если я делаю перегруппировку свопами то мне придётся свопать не только сортируемые элементы но и массив индексов, нет? Или я запутался.
источник

MS

Mikola Summer Duck in pro.algorithms
Или дублировать сортируемый массив 🤔
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
values = {'d', 'c', 'b, 'a'}
keys    = {4,  3,   2,  1}

Создаёшь новый масив
temp   =  {0,  1,  2,   3}
Сортируешь temp по компаратору bool cmp(int i1, int i2) return keys[i1] < keys[i2].

После этого получаешь
temp   =  {3,  2,  1,  0}
источник

MS

Mikola Summer Duck in pro.algorithms
Не, как массив индексов построить я придумал
источник

MS

Mikola Summer Duck in pro.algorithms
Я не придумал как им аккуратнее всего воспользоваться.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
Ок, а типы ключей и значений отличаются?
источник

MS

Mikola Summer Duck in pro.algorithms
Технически да.
источник

MS

Mikola Summer Duck in pro.algorithms
У меня есть
vector<Keys>
vector<Foos>
vector<Bars>

так что Keys[i], Foos[i], Bars[i] семантически описывают одну штуку.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
А не проще ли их тогда запихнуть в одну структуру, которую, которую потом можно сортировать в массиве, как единое целое?
источник

MS

Mikola Summer Duck in pro.algorithms
Я хочу отсортировать их так, будто это на самом деле vector<Keys, Foos, Bars>, где ключ для сортировки это Keys.
источник

MS

Mikola Summer Duck in pro.algorithms
 ‌‌Gleb Pilipets
А не проще ли их тогда запихнуть в одну структуру, которую, которую потом можно сортировать в массиве, как единое целое?
Нет, по причинам не относящимся к задаче.
источник

MS

Mikola Summer Duck in pro.algorithms
Ну то есть, если бы я мог так сделать, то я бы не приходил в эту конфу с вопросами, не так ли.
источник