Проблема такая — мне нужно написать процедуру, в которой бы на вход подавался какой-то список, а выход она подавала этот список уже отсортированным методом MergeSort (прямого слияния).
Сам алгоритм сортировки обычного численного массива у меня есть, проблема в другом — незнаю как переделать его (алгоритм) так, чтобы он сортировал список.
Re: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Ozone, Вы писали:
O>Проблема такая — мне нужно написать процедуру, в которой бы на вход подавался какой-то список, а выход она подавала этот список уже отсортированным методом MergeSort (прямого слияния). O>Сам алгоритм сортировки обычного численного массива у меня есть, проблема в другом — незнаю как переделать его (алгоритм) так, чтобы он сортировал список.
Здравствуйте, Ozone, Вы писали:
O>Проблема такая — мне нужно написать процедуру, в которой бы на вход подавался какой-то список, а выход она подавала этот список уже отсортированным методом MergeSort (прямого слияния). O>Сам алгоритм сортировки обычного численного массива у меня есть, проблема в другом — незнаю как переделать его (алгоритм) так, чтобы он сортировал список.
ну тогда какие проблемы? Вместо увеличения счетчиков цикла на 1, надо переставлять итераторы.
Кр-ть — с.т.
Re[2]: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Ozone, Вы писали:
O>Извините, я наверное вообще не смыслю в программировании, а это как?
Тогда мой Вам совет: купите книгу Вирта "Алгоритмы и структуры данных" и внимательно прочтите. Там во-первых, описан этот алгоритм, во-вторых, будете немного смыслить в программировании.
Кр-ть — с.т.
Re[4]: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Atilla, Вы писали:
A>Здравствуйте, Ozone, Вы писали:
O>>Извините, я наверное вообще не смыслю в программировании, а это как?
A>Тогда мой Вам совет: купите книгу Вирта "Алгоритмы и структуры данных" и внимательно прочтите. Там во-первых, описан этот алгоритм, во-вторых, будете немного смыслить в программировании.
Я как раз думал об этом. Надо исправлять положение.
Re[3]: Метод прямого слияния (MergeSort) - heeeelp!!!
O>??? У вас 2 одинаковых условия в цикле while(true). Так и должно быть?
Да. Все правильно.
Идея такая: отступаем от начала и от конца на одинаковое расстояние.
Если сделать
while(m1 < m2)
то операция сравнения итераторов отнимет O(N^2) времени.
Если же проверять неравенство
while(m1 != m2)
{
m1++; m2--;
}
то, при нечетном количестве элементов [m1,m2) итераторы перескочат друг через друга.
Поэтому сначала делаем один шаг вперед (и проверяем), затем другой шаг назад (и еще раз проверяем).
Поскольку изначально m1 != m2 (begin != end), то зайти в цикл мы должны (while(true)).
А поскольку за каждый шаг (m1++ | m2--) диапазон [m1,m2) сокращается на 1, то цикл гарантированно закончится за N проверок (где N — количество элементов).
Перекуём баги на фичи!
Re[4]: Метод прямого слияния (MergeSort) - heeeelp!!!
Все вроде правильно по алгоритму, но только компилятор у меня выдает ошибки на этих строках:
typedef std::list<int> intlist;
typedef intlist::iterator iter;
Re[5]: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Ozone, Вы писали:
O>Все вроде правильно по алгоритму, но только компилятор у меня выдает ошибки на этих строках: O> typedef std::list<int> intlist; O> typedef intlist::iterator iter;
#include <list> ?
Перекуём баги на фичи!
Re[6]: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Ozone, Вы писали:
O>>Все вроде правильно по алгоритму, но только компилятор у меня выдает ошибки на этих строках: O>> typedef std::list<int> intlist; O>> typedef intlist::iterator iter;
К>#include <list> ?
???list??? Написал. Си говорит, что мол нет такого. Как быть?
Re[7]: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Ozone, Вы писали:
К>>#include <list> ?
O>???list??? Написал. Си говорит, что мол нет такого. Как быть?
Во-первых, Си++.
Во вторых (проверь), именно <list>, а не <list.h>
В-третьих, убедись, что среди INCLUDE есть файлы библиотеки STL (это C++ — хедеры без расширения .h).
В-четвертых, ну, я не знаю, что еще может быть
Перекуём баги на фичи!
Re[8]: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Ozone, Вы писали:
К>>>#include <list> ?
O>>???list??? Написал. Си говорит, что мол нет такого. Как быть?
К>Во-первых, Си++. К>Во вторых (проверь), именно <list>, а не <list.h> К>В-третьих, убедись, что среди INCLUDE есть файлы библиотеки STL (это C++ — хедеры без расширения .h).
К>В-четвертых, ну, я не знаю, что еще может быть
Перечислите пжлст, что нужно подключить (если можно — все)
Сильно буду благодарен
Re: Метод прямого слияния (MergeSort) - heeeelp!!!
Здравствуйте, Кодт, Вы писали:
К>Во-первых, Си++. К>Во вторых (проверь), именно <list>, а не <list.h> К>В-третьих, убедись, что среди INCLUDE есть файлы библиотеки STL (это C++ — хедеры без расширения .h).
К>В-четвертых, ну, я не знаю, что еще может быть
Не могли бы Вы привести мне полный список того, что нужно включать в программу.
Заранее большое спасибо.
Re[9]: Метод прямого слияния (MergeSort) - heeeelp!!!