Иванова Ирина Ж 12-52-17 Емельянов Иван М 13-15-26 ....
Ну и так далее.. в списке много повторяющихся фамилий (именно фамилий!). Как упорядочить их по невозрастанию? Т.е. на 1м месте должны, по идеи, стоять все Ивановы (т.к. их больше всего), а на последнем, допустим, Ленин. Массив сам состоит из 20 строк и 4 колонок... спасибо!
volvo
15.10.2006 14:20
То, что ты привел - не называется "по невозрастанию"... Оно называется "по убыванию частоты появления". Как у тебя массив описан?
volvo, я спросил "Как упорядочить по невозрастанию?.е. на 1м месте должны, по идеи, стоять все Ивановы (т.к. их больше всего), а на последнем, допустим, Ленин.", т.к. в задании так сказано... ))
Значит, тогда так: сначала сортируешь массив любым способом (из FAQ-а) по невозрастанию ПЕРВОГО элемента (фамилии), а потом (с уже отсортированным массивом) делаешь следующее:
1) ищешь максимальную последовательность одинаковых подряд идущих фамилий (запоминая ее начало, т.е. ты должен в любой момент знать, где в массиве начинается самая длинная последовательность одинаковых фамилий, и сколько именно одинаковых фамилий она содержит)... 2) когда макс. последовательность найдена, просто меняешь местами max (это ее длина) первых элементов массива с элементами, начинающимися с max_pos (это - индекс начала максимальной последовательности)... 3) затем начинаешь искать следующую макс. последовательность. Естественно, что первые max элементов в расчет уже приниматься не должны, они уже стоят на мечтах, поэтому начинаешь с max+1...
Продолжать до тех пор, пока общее число перемещенных на втором этапе элементов не сравняется с длиной исходного массива...
Код не привожу, ибо "Теория"
klem4, не то...
Надо вывести не просто по алфавиту, а по частоте фамилии...
Gl00M
15.10.2006 15:11
Спасибо, volvo и klem4, за подсказку! Код и не нужен был... я ж осознанно в теорию писал! Будут еще вопросы - напишу!
мисс_граффити
17.10.2006 2:46
Цитата(volvo @ 15.10.2006 12:10)
2) когда макс. последовательность найдена, просто меняешь местами max (это ее длина) первых элементов массива с элементами, начинающимися с max_pos (это - индекс начала максимальной последовательности)...
если менять местами, нарушится отсортированность. то есть у нас есть:
Иванов Иван Иванов Петр Сидоров Иван Сидоров Денис Петров Дмитрий Петров Александр Петров Павел.
Если поменять, получим:
Петров Дмитрий Петров Александр Петров Павел Сидоров Денис Иванов Иван Иванов Петр Сидоров Иван
тут что-то типа сортировки со вставкой: старое надо сдвигать, а на его место ставить новое.
volvo
17.10.2006 3:02
Вообще-то я алгоритм списывал с рабочей версии программы, упорядоченность не нарушается... Может не совсем корректно выразился, извиняйте, я Паскалем владею лучше, чем русским языком
мисс_граффити
17.10.2006 21:09
возможно, я неправильно поняла... просто как раз на лекции раз 8 повторили, чем обменные сортировки отличаются от сортировок со вставкой, вот и зациклилась
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.