Сортировка данных
Сортировка данных
Рассмотрим еще раз функцию main( ):
main( )
{
int numbers[MAXSIZE]; /* массив для ввода */
int size; /* количество введенных элементов */
size = getarray(numbers, MAXSIZE); /* помещает ввод в массив */
sort(numbers, size); /* сортировка массива */
printf(numbers, size); /* печать отсортированного массива */
}
Мы видим, что функция sort() имеет на входе массив целых чисел, предназначенных для сортировки, и счетчик количества элементов, подлежащих сортировке. На выходе получается массив, содержащий отсортированные числа. Мы все еще не решили, как выполнять сортировку, поэтому мы должны дополнительно уточнить это описание.
Очевидно, в начале трудно определить направление сортировки. Собираемся ли мы вести сортировку от большего к меньшему, или наоборот? Мы свободны в выборе и допустим, что хотим сортировать от большего к меньшему. (Можно сделать программу, работающую любым из этих методов, но тогда нам нужно придумать способ сообщить ей о своем выборе.)
Рассмотрим теперь метод, который будем использовать для сортировки. В настоящее время разработано много алгоритмов сортировки; возьмем один из самых простых.
Вот наш план на псевдокоде:
от n = первому элементу до n = ближайшему - к- последнему элементу находим самое большое из оставшихся чисел и помещаем его в n-ю позицию.
Он выполняется примерно так. Сначала пусть n = 1. Мы просматриваем весь массив, находим самое большое число и помещаем его в первый элемент. Затем n = 2, и мы опять просматриваем весь массив, кроме первого элемента, находим самое большое из оставшихся чисел и помещаем его во второй элемент. Продолжаем этот процесс до тех пор, пока не достигнем ближайшего - к - последнему элементу. Теперь осталось только два элемента. Мы сравниваем эти числа и помещаем большее в элемент, ближайший - к - последнему. Оставшееся самое меньшее из всех чисел помещаем в последний элемент.
Это выглядит очень похоже на задачу с циклом for, но мы все же должны описать процесс "найти и поместить" более детально. Как сделать так, чтобы мы находили каждый раз самое большое из оставшихся чисел? Вот один способ. Сравните первый и второй элементы оставшегося массива. Если второй больше, поменяйте их местами. Теперь сравните первый элемент с третьим. Если третий больше, поменяйте местами эти два. Каждый раз больший элемент перемещается вверх. Продолжаем таким образом, пока не сравним первый элемент с последним. Если мы дошли до конца, самое большое число теперь будет в первом элементе оставшегося массива. По существу мы имеем отсортированный массив для первого элемента, но остаток массива находится в беспорядке. На псевдокоде это можно выразить так:
для n = от второго до последнего элемента сравниваем n-й элемент с первым; если n-й больше, меняем их местами.
Это напоминает еще один цикл for. Его следует вставить в первый цикл for. Внешний цикл показывает, какой элемент массива должен быть заполнен, а внутренний цикл находит значение, которое следует поместить туда. Записывая обе части на псевдокоде и переводя их на язык Си, мы получаем следующую функцию:
/* сортировка массива целых чисел в порядке убывания */
sortarray(array, limit)
int array[ ], limit;
{
int top, search;
for(top = 0; top < limit - 1; top++)
for(search = top + 1; search < limit; search++)
if(array [search] > array[top]
interchange(&array[search], &array[top] );
}
Мы помним, что первый элемент имеет индекс 0. Кроме того, еще в гл. 9 была создана функция обмена, поэтому мы использовали ее здесь. Так как функция interchange "работает" с двумя элементами массива, а не со всем массивом, мы должны использовать адреса только двух интересующих нас элементов. (В то время как имя array является указателем на весь массив, нам нужно применить операцию &, чтобы указывать на отдельные элементы.)
Мы использовали top в качестве индекса для элемента массива, который следует заполнить, так как он является вершиной не отсортированной части массива. Индекс search перемещает по массиву в порядке убывания текущий элемент. Большинство текстов использует обозначения i и j для этих индексов, однако это осложняет ситуацию, если нужно посмотреть, что происходит.
Этот алгоритм иногда называют "пузырьковой сортировкой", так как самое большое значение медленно поднимется вверх. Именно теперь мы должны написать функцию рrint( ).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Глава 5 Принятие решений и сортировка данных
Глава 5 Принятие решений и сортировка данных Эта глава посвящена принятию решений, сортировке и различным способам обработки данных в ХМL-документах. Мы рассмотрим элементы <xsl:if>, <xsl:choose>, <xsl:when>, <xsl:otherwise>, <xsl:for-each> и <xsl:sort>, при помощи которых вы сможете
Сортировка базы данных
Сортировка базы данных Итак, Web-сценарий, генерирующий полосу навигации, работает. Самое время дополнить полосу навигации еще парой пунктов.Откроем файл Web-сценария data.js и добавим в массив aCSS два элемента:aCSS[3] = { name: "font-family", url: "attrs/a_font-family.htm" };aCSS[4] = { name: "font-size", url: "attrs/a_font-size.htm"
Сортировка
Сортировка В отличие от предыдущих версий в Проводнике Windows Vista заголовки столбцов, с помощью которых можно проводить сортировку объектов и другие действия, доступны при любом способе отображения значков.Щелчком кнопки мыши на заголовке любого столбца вы можете
Сортировка базы данных
Сортировка базы данных Итак, Web-сценарий, генерирующий полосу навигации, работает. Самое время до- полнить полосу навигации еще парой пунктов.Откроем файл Web-сценария data.js и добавим в массив aCSS два элемента:aCSS[3] = { name: "font-family", url: "attrs/a_font-family.htm" };aCSS[4] = { name: "font-size", url:
Сортировка
Сортировка Трудности? Это еще что такое? Однако бесплатный сыр сами знаете где. Дело в том, что, так как сами элементы в списке не хранятся, придется самим заботится о сортировке. Не удастся воспользоваться функцией CListCtrl::SortItems, бесполезно писать CompareItems и т.п. Все, что у вас
5.4. Сортировка данных в таблице
5.4. Сортировка данных в таблице Сортировка данных – это одна из наиболее важных команд для организации таблицы. Целью сортировки часто является упорядочивание записей на основе выбранного критерия. Часто сортировку используют, если данные в таблице набирались
Сортировка данных
Сортировка данных Любые данные вы можете отсортировать по алфавиту (если сортируемые ячейки содержат текст), по возрастанию или убыванию и даже по цвету ячейки и шрифта. Чтобы рассмотреть примеры сортировки данных, приведенные в этом разделе, вам нужно создать таблицу.
16.6. Сортировка данных в Core Data
16.6. Сортировка данных в Core Data Постановка задачи Требуется сортировать управляемые объекты (записи), выбираемые из контекста управляемых объектов (базы
2.2.4. Группировка и сортировка данных отчета
2.2.4. Группировка и сортировка данных отчета RPTwin позволяет выстроить данные отчета в определенном порядке (сортировка) либо объединить их в группы (группировка). Так, в примере на рис. 2.2.2 отчет сгруппирован по имени стрелки, другими словами, в каждую группу включаются
Сортировка данных
Сортировка данных Практически вся информация, с которой вы работаете в электронном редакторе, представляет собой разнообразные списки. В терминологииMicrosoft Excel они называются «списками базы данных». Excel предоставляет возможность сортировать данные внутри таблицы по
5.2.2. Группировка и сортировка данных отчета
5.2.2. Группировка и сортировка данных отчета RPTwin позволяет выстроить данные отчета в определенном порядке (сортировка) либо объединить их в группы (группировка). Так, в примере на рис. 5.3 отчет сгруппирован по имени стрелки, другими словами, в каждую группу включаются
Сортировка
Сортировка При преобразовании документа элементами xsl:for-each и xsl:apply-templates, выбранные узлы по умолчанию обрабатываются в порядке просмотра документа, который зависит от выражения, использованного в атрибуте select этих элементов. XSLT позволяет изменять этот порядок
Сортировка списков данных
Сортировка списков данных Нередко возникает необходимость отсортировать данные в списке, то есть упорядочить записи по значению определенного поля. В Excel 2007 для сортировки данных имеются команды на двух вкладках ленты:? в группе Редактирование вкладки Главная есть
Практическая работа 50. Сортировка списка данных
Практическая работа 50. Сортировка списка данных Задание 1. Упорядочить записи в таблице (см. рис. 6.65) по убыванию цены товара (от большей к меньшей).Последовательность выполнения1. Создайте новую книгу и заполните таблицу данными (см. рис. 6.65). Сохраните ее под именем Товары
Сортировка данных
Сортировка данных По умолчанию записи в таблице отображаются в том порядке, в котором они были введены в базу данных. Часто возникает необходимость упорядочить (то есть отсортировать) записи в таблице по значению определенного поля. Сортировка позволяет просматривать
Практическая работа 54. Просмотр и редактирование таблиц. Поиск и сортировка в базе данных
Практическая работа 54. Просмотр и редактирование таблиц. Поиск и сортировка в базе данных Задание 1. Дополните таблицы Товары и Сотрудники базы данных Борей собственными данными используя как непосредственный ввод данных в таблицу, так и соответствующие