![]() |
|
Модераторы: bsa |
![]()
|
|
| Rostislav1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
Нужно найти минимальное количество перестановок соседних элементов последовательности, необходимое для того, чтобы отсортировать ее по возрастанию. Пробовал просто посчитать кол-во шагов, за которое сортировка пузырьком сделает это - не проходит по времени. Посоветовали сортировку слиянием использовать.
Вот, что получилось, но эта функция не правильно считает кол-во перестановок. Где я ошибся? |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
По сути, везде. Вам можно переставлять только соседние элементы, а Вы что делаете?
А это что такое?))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Rostislav1 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
вот здесь, если соседние элементы не упорядочены, то увеличиваем flag и в конечном итоге в этой переменной должно храниться кол-во перестановок, но этого не происходит.
|
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Нужно же посчитать число перестановок, а саму сортировку делать не обязательно?
Используя сортировку слиянием, во время слияния делаем неподсчитанное число перестановок, и не обезательно соседних. Сортировка будет быстрее, но ответ будет неправильным. Если сливать по правилам - переставляя только сосединие элементы - будет много лишних перестановок. Чтобы получить правильный ответ, нужно делать сортировку пузырьком, или, не делая саму сортировку, сравнить все элементы попарно. Число сравнений N*(N-1)/2 - много, но ответ будет правильным. |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Вот именно здесь сначала return, потом delete... Некошерно... Здесь-то Вы тоже делаете перемещения, но их-то не учитываете во flags... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Rostislav1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
Да, не обязательно. так и делал, но как уже говорил - не проходит по времени. Те, кто сделал утверждают, что использовали именно сортировку слиянием. Может быть есть еще какой-нибудь более быстрый вариант? Согласен |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Сначала можно из массива элементов сделать массив или список указателей - тогда сами элементы копировать не надо.
При слиянии временный массив не создаётся, перемещаются указатели и подсчитывается число перемещений, со списком вроде будет быстрее. Заодно сделайте вариант с пузырьком - для проверки правильности ответа. |
|||
|
||||
| Rostislav1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
Переделал, но снова не верно считает...
Это сообщение отредактировал(а) Rostislav1 - 6.5.2013, 13:15 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Вы всё время обнуляете счётчик: Тогда как нужно: с соответствующими изменениями в input и output... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Rostislav1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
да, я заметил уже, отредактировал, но все равно не правильно считает(в предыдущем комментарии уже выложил отредактированную версию, но скину еще раз)
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Зачем вы создаёте vector<int> buffer? Нужно всё делать в vector<int>&mas.
Примерно так:
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |