2015-09-30 4 views
-1

Я хочу отсортировать комбинацию чисел + строк, но сортировка будет основана на количестве из этой комбинации. Можете ли вы предложить оптимальное решение?Сортировка номеров и строк Al

Say мои строки:
12 Masdf
4 Oasd
Тверь и так далее. Сортировка будет основана на числах, таких как 12, 4, 44, и после сортировки я должен показать полные буквенно-цифровые строки.

Поскольку программа будет работать на тысячах данных, я не хочу разбивать строку и сравнивать число на каждой итерации. Мой план состоит в том, чтобы извлечь числа и взять их в массиве, а затем отсортировать массив. После сортировки я хочу вернуть числа со связанными строками и сохранить их в строковом массиве. Это должно быть сделано на C++. Необходимо применять алгоритмы - Сортировка вставки, Быстрая сортировка, Сортировка слияния и т. Д.

+1

Легко разрешимо с помощью 'std :: map' /' std :: multimap'. –

+0

@bku_drytt, если, конечно, домашнее задание не должно делать классы, которые это делают. Последнее предложение его описания проблемы заставляет меня думать, что профессор хочет, чтобы он реализовывался с помощью различных алгоритмов сортировки. AFAIK (и я не являюсь экспертом в 'std ::'), вы можете предоставить только функцию сравнения, а не функцию сортировки, что заставляет меня полагать, что назначение - это больше, чем просто использование 'std :: map' –

ответ

0

Создайте класс для хранения полной строки и числа. Сделайте класс Comparable. Преобразуйте список строк в список классов. Сортировка списка с использованием метода сортировки. Итерируйте список и напечатайте строковые поля.

К сожалению, это был ответ для Java, поскольку вы отметили его Java. Замените/удалите Comparable за все, что хорошо для C++.

0

Я собираюсь предположить, что эти две части находятся в отдельных переменных и не объединены в одну строку (если бы вы могли просто сохранить их в списке).

Сначала рассмотрите карту. Каждое «ведро» карты может быть представлено числом. Внутри каждой из карт ведра есть куча строк в списке. (Обратите внимание, это также может быть решена с помощью массива, особенно если Integer часть всегда находится под некоторым фиксированным значением) Java-эквивалент будет выглядеть следующим образом:

Map map = new HashMap<Integer,ArrayList<String>>(); 

Для сортировки этой пользовательской коллекции сначала целую часть значения будет искать на карте, возвращая список. Каждый элемент в списке будет иметь одинаковый стартовый номер. Итак, теперь мы просматриваем список в строковой части значения (я предполагаю, что список отсортирован, поэтому вы можете делать все, что захотите, т.е.: selection/quicksort).

Преимущества этого поиска означают, что если число не найдено в Hashmap, вы сразу же узнаете, что для него нет строковой части.

Смежные вопросы