КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Сортировка одномерных массивов
Сортировка представляет собой процесс упорядочения элементов в массиве в порядке возрастания или убывания их значений. Например, массив В из n элементов будет отсортирован в порядке возрастания значений его элементов, если B[1] ≤ B[2] ≤ … ≤ B[n], и в порядке убывания, если B[1] ≥ B[2] ≥ … ≥ B[n]. В повседневной жизни процесс сортировки «массивов» используется очень часто. Например, список в журнале студенческой группы (сортировка по алфавиту фамилий, а при необходимости и имен, и отчеств) или итоговая таблица чемпионата страны по футболу (сортировка по набранным командой очкам). Рассмотрим некоторые из алгоритмов сортировки. При этом будем рассматривать сортировку по возрастанию. Ключевым отличием сортировки по убыванию будет то, что в проверке знак «больше» необходимо будет заменить на знак «меньше». 9.1.2.1 Сортировка методом «пузырька». Сортировка методом «пузырька» основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов. Рассмотрим этот метод более подробно. Сравним первый элемент массива со вторым, если первый окажется больше второго, то поменяем их местами. Затем сравним второй с третьим, если второй окажется больше третьего, то также поменяем их местами. Продолжаем сравнивать попарно соседние элементы до сравнения (n–1)-го и n-го элементов. В результате этих действий самый большой элемент станет на последнее (n-е) место. Теперь повторим данный алгоритм сначала, с 1-го до (n–1)-го элемента. Последний n-й элемент не рассматривается, т. к. он уже занял свое место. После проведения данной операции самый большой элемент оставшейся части массива станет на свое (n–1)-е место. Так, уменьшая количество проверяемых элементов, повторяем до тех пор, пока не проверим последние (точнее первые) два элемента. Пошаговый пример выполнения данного алгоритма сортировки представлен в таблице 9.1. Таблица 9.1 – Сортировка методом «пузырька»
Ниже приведен текст фрагмента программы, предназначенный для сортировки одномерного массива B[n] методом «пузырька». for (j= n-1; j>0; j--) for (i= 0; i<j; i++) if (B[i]>B[i+1]) {t=B[i]; B[i]=B[i+1]; B[i+1]=t;} 9.1.2.2 Сортировка методом перестановки. Сортировка методом перестановки основана на поиске наибольшего элемента среди нескольких и последующего его перемещения на последнюю позицию. Рассмотрим этот метод более подробно. Найдем в массиве самый большой элемент (при этом запоминаем и номер позиции, где стоит этот элемент) и поменяем его с последним n-м. Самый большой элемент массива станет на свое место. Найдем среди (n–1) первых элементов наибольший и поменяем его местами с (n–1)-м. Повторяем эти действия, уменьшая количество проверяемых элементов на единицу до тех пор, пока количество рассматриваемых элементов не станет равным одному. Пошаговый пример выполнения данного алгоритма сортировки представлен в таблице 9.2. Таблица 9.2 – Сортировка методом перестановки
Ниже приведен текст фрагмента программы, предназначенный для сортировки одномерного массива B[n] методом перестановки. for (j= n-1; j>0; j--) { max= B[0]; imax= 0; for (i= 1; i<j+1; i++) if (B[i]>max) {max= B[i]; imax= i;} t= B[imax]; B[imax]= B[j]; B[j]= t; } 9.1.2.3 Сортировка методом вставки. Сортировка методом вставки основана на поочередном переносе элементов исходного массива в другой, при этом в новый массив элементы добавляются уже в упорядоченном виде. Рассмотрим этот метод более подробно. Данный метод удобнее рассмотреть на наглядном примере. Предположим, что вы перевозите многотомное собрание сочинений А. Дюма своей библиотеки на новую квартиру. Необходимо расставить хаотично упакованные в коробку (массив В) книги на книжную полку (массив С)
по порядку. Первую взятую книгу из коробки (первый элемент массива В) помещаем на полку в крайнюю левую позицию (на первую позицию в массив С). Для второй, взятой из коробки, книги делаем проверку, учитывая номер тома (значение элемента массива). Если номер тома взятой книги больше, чем номер тома выставленной на полку книги, то вставляем новую книгу справа от уже стоящей, иначе – слева. Повторяем подобные операции несколько раз. Взяв из коробки k-ю книгу, сравниваем ее (по номеру тома) с уже стоящими на полке справа налево. Если стоящая на полке крайняя правая книга больше по номеру тома, чем взятая из коробки, то сдвигаем книгу на полке правее и проверяем следующую книгу. Найдя позицию расположения взятой из коробки книги среди уже стоящих, вставляем ее на книжную полку. Повторяем данные операции, пока все книги не займут свои позиции на книжной полке. Пошаговый пример выполнения данного алгоритма сортировки представлен в таблице 9.3. Таблица 9.3 – Сортировка методом вставки
Ниже приведен текст фрагмента программы, предназначенный для сортировки одномерного массива B[n] методом вставки. C[0]= B[0]; for (i= 1; i< n; i++) { j= i; while (j>=0 && B[i]<C[j-1]) { C[j]= C[j-1]; j--;} C[j]= B[i];}
9.1.2.4 Сортировка методом Шелла. Сортировка Шелла была названа в честь еѐ изобретателя – Дональда Шелла, который опубликовал этот алгоритм в 1959 году. Сортировка Шелла (англ. Shell sort) – алгоритм сортировки, являющийся усовершенствованным вариантом сортировки методом «пузырька». Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определѐнном расстоянии друг от друга. Иными словами – это сортировка методом «пузырька» с предварительными «грубыми» проходами. При сортировке Шелла сначала сравниваются и сортируются между собой значения, отстоящие один от другого на некотором расстоянии d. После выполнения интервал уменьшается по формуле d(k) = [d(k + 1) – 1] / 2. После этого процедура повторяется для уменьшенных значений d, а завершается сортировка Шелла упорядочиванием элементов при d = 1 (то есть обычной сортировкой методом «пузырька»). Эффективность сортировки Шелла в определѐнных случаях обеспечивается тем, что элементы «быстрее» встают на свои места. Ниже приведен текст фрагмента программы, предназначенный для сортировки одномерного массива B[n] методом Шелла. d=n-1; while (d>0) { for (j=1; j<n; j+=d) { for (i=0; i<n-j; i++) { if (B[i]>B[i+1]) { t=B[i]; B[i]=B[i+1]; B[i+1]=t; } } } d=(d-1)*0.5; }
Дата добавления: 2015-07-13; Просмотров: 473; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |