Comments 42
Уж простите, но фото просто шикарное.
Искал по разным источникам иллюстрацию сортировки,
нашёл на вики в статье Сортировочная станция ))
нашёл на вики в статье Сортировочная станция ))
Суровая сортировочная станция, внушает
А ведь есть и побольше — Bailey Yard
Минусики на фото кода это такая ловушка? Я не один попробовал нажать на них?:)
Я пришёл к выводу, что код проще всего оформить скриншотами.
Ссылка на исходный текст под каждым имеется.
Ссылка на исходный текст под каждым имеется.
самый лучший способ — это работать с парами (std::pair <MyData * / MyData & / MyData, int>, где второе значение — начальный индекс).
а для небольших порций данных, где не важна скорость, можно и самому написать простейшую сортировку с доп. массивом.
примерно так:
примерно так:
size_t len = len = m_sections.size();
for (size_t i = 0; i < len; i++)
realSectIdxRv.push_back(i);
for (size_t i = 0; i < len; i++)
{
// находим минимум среди имён [i, len]
size_t minj = i;
for (size_t j = i + 1; j < len; j++)
{
if (strcmp(m_sections[j].name.c_str(), m_sections[minj].name.c_str()) < 0)
minj = j;
}
// записываем на i-ую позицию эту строку, она i-ая по порядку
swap(m_sections[i], m_sections[minj]);
swap(realSectIdxRv[i], realSectIdxRv[minj]);
}
а почему бы просто не создать массив указателей на элементы, в котором они будут в изначальном порядке?
Только вот в Domino хранить index, который всего лишь нужен для сохранения порядка начальной сортировки — не очень хорошо. C точки зрения ООП — это нарушение абстракции.
Только вот в Domino хранить index, который всего лишь нужен для сохранения порядка начальной сортировки — не очень хорошо. C точки зрения ООП — это нарушение абстракции.
Лучше всего это можно сделать через boost::multi_index, контейнер именно для этого и создан.
А почему не использовать пары? Для всех значений в пару записать порядковый номер и отсортировать. Потом, когда нужно будет восстановить, отсортировать по second в паре.
А вот ответ на вопрос, как сортировать по second
www.cplusplus.com/reference/algorithm/sort/ см example
www.cplusplus.com/reference/algorithm/sort/ см example
Когда прочитал про возвращение прежнего порядка, в первую очередь подумалось вернуть данные, сохраненные перед сортировкой (:
Реально используете notepad++ для разработки, или только для подсветки синтаксиса в статье?
Похоже, я до чего-то сильно не догоняю. Почему бы не сортировать (и дальше обрабатывать) копию исходного массива, если хочется сохранить исходный порядок? Настолько важна память или массив заоблачных размеров?
Бывает, что отсортированным и обработанным данным в итоге требуется исходный порядок.
Ну вот собственно почему бы этот порядок изначально не запомнить, вместо того, чтобы потом восстанавливать?
Я понимаю, что все свелось к уже сказанному, но чесслово, подход несколько смутил. Нехозяйственное какое-то отношение к информации :)
Я понимаю, что все свелось к уже сказанному, но чесслово, подход несколько смутил. Нехозяйственное какое-то отношение к информации :)
Пересортировать вновь по индексам будет примерно аналогичной операцией, как поиск элемента и установка его на нужное место.
Разве нет?
Причем памяти при этом потребуется в два раза меньше
Разве нет?
Причем памяти при этом потребуется в два раза меньше
тут вот на днях на просторах инета нашел за О(n):
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
:)
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
:)
Sign up to leave a comment.
Сортировка данных и возвращение им прежнего порядка