Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.doc
Скачиваний:
88
Добавлен:
01.04.2014
Размер:
258.05 Кб
Скачать

Блок схема: сортировки пузырьком

Быстрая сортировка

Рассмотрим следующий вид сортировки, которая называется быстрая сортировка.

Пример дан массив, случайным образом в нем выбираем элемент. Допустим это тройка.

После этого все, что меньше тройки мы двигаем влево, а больше вправо. Получим следующий массив.

И отдельно теперь отсортируем все что левее тройки и правее тройки

Получим отсортированный массив.

Реализация алгоритма на Паскале будет иметь следующий вид:

program fff;

const

n=10; {Количество элементов массива}

var

i,j,x:integer;

a:array [0..n] of integer;

procedure swap(var a,b:integer); {Процедура меняет числа местами}

var

c:integer;

begin

c:=a;

a:=b;

b:=c;

end;

procedure qsort(l,r:integer); {Процедура производит сортировку}

var

x,i,j:integer;

begin

i:=l;

j:=r; {l,r левые и правые элементы массива}

x:=a[l+random(r-l+1)]; {выбираем элемент в массиве случайным образом, для того чтоб}

while i<=j do begin {программа не зависела от входных данных и работала в общем случае за одинаковое количество операций}

while(a[i]<x) do inc(i); {Ищем в левой части индексы элементов больших по значению чем наш}

while (a[j]>x) do dec(j); {Ищем в правой части индексы элементов меньших по значению чем наш}

if (i<=j)then begin {если такие элементы мы нашли то}

swap(a[i],a[j]); {меняет числа местами}

inc(i); {двигаемся дальше и ищем новые элементы}

dec(j); {двигаемся дальше и ищем новые элементы}

end;

end;

if r>I then qsort(i,r); {после того как мы отсортировали массив}

if l<j then qsort(l,j); {рекурсивно сортируем его левую и правую части и т.д.}

end;

BEGIN

for i:=1 to n do

a[i]:=random(10); {Ввод массива случайным образом от о до 9}

qsort(1,n); {сортируем}

for i:=1 to n do {Вывод элементов на экран}

write(a[i]:4);

writeln; {Для удобство просмотра програмы}

end.

Блок схема: быстрая сортировка.

Тестирование программы.

Тестированием программы заключается в проверки всех «ветвей», по которым пойдет алгоритм в зависимости от входных данных.

Размер массива 100 массив уже упорядоченный

Pquick=65, pselect=4950, pbuble=0, srselect=5049, srquick=616, srbuble=99;Tq=1,ts=66,tb=1;

Размер массива 1000 массив задан случайным образом.

Pquick=3102, pselect=5909, pbuble=238560, srselect=500499, srquick=5777, srbuble=928017;Tq=44,ts=82,tb=3290;

.

Анализ полученных результатов

Размер массива 100 элементов

Упорядоченный массив

Упорядоченный в обратном порядке

Перестановки

4650

0

65

Перестановки

2450

4950

118

Сравнения

5049

99

592

Сравнения

5049

9900

506

Время

65

1

1

Время

33

72

1

Наполовину упорядоченный

Заданный злучайным оброзом

Перестановки

2450

2450

207

Перестановки

317

2494

196

Сравнения

5049

9801

386

Сравнения

5049

9801

386

Время

33

33

5

Время

33

33

5

Размер массива 500 элементов

Упорядоченный массив

Упорядоченный в обратном порядке

Перестановки

124750

0

330

Перестановки

62250

124750

568

Сравнения

125249

499

4436

Сравнения

125243

249500

423

Время

1

1

6

Время

456

917

6

Наполовину упорядоченный

Заданный злучайным оброзом

Перестановки

62250

62250

1265

Перестановки

1928

61806

1358

Сравнения

45149

249001

3238

Сравнения

126249

230538

3189

Время

456

456

11

Время

12

456

6

Размер массива 1000 элементов

Упорядоченный массив

Упорядоченный в обратном порядке

Перестановки

499500

0

660

Перестановки

250000

2000

3000

Сравнения

500499

999

1154

Сравнения

500499

999000

9605

Время

3669

1

5

Время

1854

3675

6

Наполовину упорядоченный

Заданный злучайным оброзом

Перестановки

249500

249500

2771

Перестановки

3868

244317

3097

Сравнения

500499

998001

6963

Сравнения

500409

951048

5353

Время

1835

1834

22

Время

22

1801

22

По полученным данным можно сказать, что наиболее целесообразно использовать быструю сортировку массива, она обеспечивает выполнения сортировки за минимальное время особенно это сказывается при больших массивах.

Методика работы с программой.

При запуске программы появится информация об том, что это за программа и для каких целей она необходима. После этого надо выбрать нажать клавишу Enter и появится информация о выборе размера массива. Если хотите выбрать массив состоящий из 100 элементов, то необходимо нажать клавишу Enter. После этого надо будет выбрать способ первоначальной упорядоченности массива: если хотите выбрать отсортированный в прямом порядке нажмите 1 Enter. Если хотите выбрать отсортированный в обратном порядке нажмите клавишу 2 и Enter. Отсортированный наполовину 3 и клавишу Enter. И наконец массив заданный случайным образом надо выбрать 4.

После этого компьютер попросит нажать Ввод. Если сортировка будет проходить длительное время то вы увидите сообщения о том, что вам надо подождать.

Дальше появится результаты работы программы, которые отображены будут в виде трех гистограмм. Первая гистограмма это количество перестановок для трех различных сортировок массива. Вторая гистограмма это количество сравнений для трех различных сортировок массива. Третья это время каждой из сортировок.