Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Классические сортировки числовых массивов
Общие требования к сортировкам: 1. Используется участок памяти с исходным массивом 2. Допустимы дополнительные затраты памяти только для вспомогательных переменных
Примем, что массивы сортируем по возрастанию и рассмотрим 5 сортировок и сравним их между собой. ● Обменная сортировка (сортировка обменами)
Вывод: количество проходов (n-1) , в каждом проходе фиксированное число сравнений, в i-ом проходе (n-1-i). Общее количество сравнений Σ (от i=0 до n-2) (n-1-i)=n(n-1)/2. Наилучший случай – массив уже отсортирован и тогда обменов не будет. Наихудший – пересортировка, обмены = сравнениям. Вычислительную эффективность (сложность) сортировок оцениваем количеством сравнений и обменов и обозначаем О(n2).
● Сортировка выбором
Вычислительная сложность этой сортировки: сортировка требует фиксированного числа сравнений, в i-ом проходе происходит сравнений i-ого элемента с a[i+1] до a[n-1], количество сравнений (n-1)-(i+1)-1 =n -1 –I, общее число проходов n(n-1)/2, O(n2), количество обменов всегда один на один проход, т.е. О(n), наилучшего и наихудшего случаев нет. ● Пузырьковая сортировка Для повышения эффективности вводится переменная last, в которую помещается индекс первого в последнем сравнении элемента, поэтому в очередном проходе сортируются элементы с индексами от 0 до last. Процесс прекращается, когда при очередном проходе сохраняется last=0.
Вычислительная сложность: если массив отсортирован, то нужен всего один проход с (n-1) сравнениями, это наилучший случай – О(n), наихудший – при пересортировке, требуется (n-1) проход, на каждое сравнение 1 обмен, вычислительная сложность О(n2). Эта сортировка в общем случае хуже сортировки выбором за счет большего количества обменов.
● Сортировка вставками
Среднее количество сравнений ½ +2/2+3/2+(n-1)/2=n(n-1)/2. Наилучший случай – массив отсортирован, количество сравнений (n-1), эффективность О(n), наихудший – каждый последующий элемент вставляется на место a[0], это будет при пересортировке, в этом случае сложность n(n-1)/2, O(n2). ● Быстрая сортировка Превосходит все остальные случаи, требует меньших затрат машинного времени, но не в благоприятном для себя случае, она не лучше других сортировок, но на практике такие случаи весьма редкие. Быстрая сортировка состоит из двух фаз, на первой фазе просматривается исходный массив и делится на 2 подмассива – нижний и верхний, в нижнем массиве помещаются элементы равные или меньшие центрального, в верхний – больше центрального, вторая фаза – рекурсивная, повторяются снова все действия для подмассивов и т.д. до тех пор, пока подмассивы не станут одноэлементнами.
Индексы 0 1 2 3 4 5 6 7 8 9 Исх. Массив 80 15 30 60 55 65 40 35 45 70 Low =0 mid=(low+high)/2=4 high=9 A[mid]=55
Вычислительная сложность: пусть подчиняется n=2, пусть массивы делятся поровну, т.е. центральный элемент все время оказывается в середине массива, тогда на первой фазе будет n сравнений, на рекурсивной фазе длины массива n, количество сравнений 2*n/2. Общее число сравнений n+2(n/2)+4(n/2)…=n*k=n*log2n, на этот случай соответствует уже отсортированному массиву. Пересортировка массива: 8 7 6 5 4 3 2 1
После первой фазы: 4 1 2 3 5 8 6 7
При пересортировке затраты машинного времени почти такие же, как для отсортированного массива. Значит случай пересортировки не наихудший случай, наихудший возникает тогда, когда центральный элемент все время попадает в одноэлементный подмассив. 3 8 1 5 9 В этом случае общее количество сравнений n+(n-1)+(n-2)+…+2=n(n+1)/2 -1, вычислительная эффективность O(n2). Следовательно, наихудший случай быстрой сортировки не лучше других, но такой случай маловероятен на практике, значит данная сортировка значительно эффективнее остальных сортировок. ● Поиск Цель поиска – найти в массиве элемент равный ключу.
1. Линейный поиск, т.к. индекс возрастает линейно
Наиболее благоприятный O(1), наихудший – последний совпал с ключом O(n), в среднем O(n/2), линейный поиск применяется для коротких массивов.
|
Последнее изменение этой страницы: 2019-05-08; Просмотров: 177; Нарушение авторского права страницы