Варианты заданий 37 Контрольные вопросы к защите ргр: 39
Вид материала | Контрольные вопросы |
СодержаниеАнализ эффективности сортировки Некоторые методы сортировок |
- А внимательно прочитайте вопросы и варианты ответов, 66.8kb.
- А внимательно прочитайте вопросы и варианты ответов, 85.91kb.
- Контрольная работа и ее краткая характеристика дкр, 446.71kb.
- Варианты задания на ргр (по уровням сложности), 35.75kb.
- Контрольные вопросы, тематика тестовых заданий и экзаменационных билетов, 23.19kb.
- План работы комитета ргр по оценке недвижимости на 2011 2012, 46.4kb.
- Общие рекомендации. Внимательно прочитайте каждое задание и предлагаемые варианты ответа,, 59.07kb.
- Учебное пособие Новочеркасск, 2009 удк 343. 8 (075. 8) Ббк 67. 409, 2241.72kb.
- Александр Леонидович Симанов Содержание История философии. Онтология и гносеология., 225.58kb.
- Особенности бухгалтерского учета, 286.34kb.
Анализ эффективности сортировки
В качестве оценки эффективности алгоритма сортировки обычно используют функциональную зависимость времени работы алгоритма от размерности исходного массива T(n), где n – количество элементов массива. Временем работы алгоритма называют число элементарных шагов, которые он выполняет. При анализе алгоритмов в первую очередь интерес представляет характер зависимости при достаточно больших размерностях массивов (n→∞).
Так как в основе алгоритма большинства сортировок лежит операция сравнения двух элементов массива и перестановка элементов, то эффективность алгоритма сортировки во многом зависит от количества сравнений и количества перестановок. Поэтому эффективность сортировки можно определить как зависимость количества сравнений и перестановок от размера массива.
Количество сравнений и перестановок будет зависеть не только от длины массива N, но и от того, насколько исходный массив упорядочен. Наиболее благоприятный случай, когда массив уже отсортирован. В худшем случае, количество перестановок и сравнений будет максимальным. Большей частью нас будет интересовать время работы в худшем случае, т.к. это определяет наибольшее время работы сортировки. На практике «плохие» случаи встречаются чаще, и время работы в среднем бывает довольно близко к времени работы в худшем случае.
В математике характер зависимости часто определяют порядком функции, при этом берется старший порядок. Такая характеристика функции называется порядком роста или сложностью. Обозначается: T(n)=Θ(g(n)). Алгоритм с меньшим порядком роста времени работы предпочтительнее.
НЕКОТОРЫЕ МЕТОДЫ СОРТИРОВОК
Сортировка подсчетом
Если элемент в отсортированном по возрастанию массиве стоит на i-ом месте, значит он не меньше (i-1) элементов.
Идея сортировки подсчетом состоит в том, чтобы выяснить, сколько, элементов превышает i-ый элемент массива, что указывает на его место в отсортированном массиве. Если значение элемента превышает k элементов, следовательно, слева от него будут стоять эти k элементов (при упорядочивании по неубыванию), а данный элемент будет стоять на (k+1)-ом месте.
Пример 1
Упорядочить по возрастанию массив целых чисел, отличных друг от друга: М={3, 6, 1, 12, 4, 25, 9}.
Для этого посчитаем, сколько элементов меньше первого элемента массива M[1]= 3, затем – сколько элементов меньше второго числа M[2]=6, и т.д. Число 3 по значению превышает только одно число, значит, оно должно стоять на 2-ом месте. В итоге получаем значения, приведенные ниже (см. ):
Таблица 1
Индекс элемента в исходном массиве P | i-ый элемент | Кол-во элементов< i-го элемента | Индекс элемента в отсортированном массиве new_P |
1 | 3 | 1 | 1+1=2 |
2 | 6 | 3 | 3+1=4 |
3 | 1 | 0 | 0+1=1 |
4 | 12 | 5 | 5+1=6 |
5 | 4 | 2 | 2+1=3 |
6 | 25 | 6 | 6+1=7 |
7 | 9 | 4 | 4+1=5 |
Блок-схема сортировки подсчетом:

Процедура сортировки подсчетом по возрастанию:
procedure sort_creat (var p:array of integer; n:byte);
var i,j,kol:integer;
new_p: array[1..n]of integer;
begin
for i:=1 to n do
begin
kol:=0;
for j:=1 to n do
if p[i]>p[j] then inc(kol);
new_p[kol+1]:=p[i];
end;
end;
Но, если массив содержит повторяющиеся элементы, то, по крайней мере, два элемента будут записаны в новый массив по одному и тому же адресу. И в итоге в выходном массиве появятся незаполненные ячейки. Разрешить данную коллизию можно наращиванием индекса на 1 до обнаружения незанятой ячейки.
Процедура сортировки подсчетом по неубыванию:
procedure sort_creat(p:array of integer; n:integer);
var i,j,kol:integer;
new_p:array[1..n]of integer;
begin
for i:=1 to n do
begin
kol:=0;
for j:=1 to n do
if p[i]>p[j] then inc(kol);
while new_p[kol+1]=p[i] do inc(kol);
new_p[kol+1]:=p[i];
end;
end;
Оценим эффективность сортировки подсчетом по количеству сравнений. Так как мы сравниваем каждый элемент с каждым элементом массива, то имеем N*N сравнений. Эффективность алгоритма C=N*N=Θ(N2), т.е. сортировка подсчетом имеет квадратичную сложность. Множитель N2 свидетельствует о том, что алгоритм неэффективен при большом N , т.к. при удвоении числа элементов массива количество сравнений увеличится в 4 раза. Но он очень прост в реализации.
Независимо от отсортированности массива, количество перестановок равно длине массива N. То есть эффективность алгоритма по перестановкам имеет линейную сложность.