
- •Вологодский государственный педагогический университет Факультет прикладной математики и компьютерных технологий Индивидуальное задание по исследованию алгоритмов Сортировки
- •Вариант задания
- •Обзор алгоритмов
- •Сортировка простым выбором
- •Быстрая сортировка с ограничением рекурсии
- •Случайный массив
- •Отсортированный массив
- •Обратно отсортированный массив
- •Сортировка простым выбором на языке Java
- •Быстрая сортировка с ограниченной рекурсией на языке Java
- •Число пересылок
- •Число сравнений ключа
- •Число пересылок
Сортировка простым выбором на языке Java
void SelectSort( tItem a[], int n)
{ int i, j, jmin;
tItem buf;
for( i = 1; i > n-1; i-- )
{ jmin = i;
for( j = 1; j < i-1; j++ )
if(a[j].key <(a[jmin].key))
jmin = j;
buf = a[i];
a[i] = a[jmin];
a[jmin] = buf;
}
}
Сортировка методом Шелла на языке Си#
void ShellSort(tItem[] a, int n){
int h=13;
int i, j;
tItem x;
while (h < n){
h = 3*h + 1;
}
h = (h - 1) % 3;
do{
h = (h - 1) % 3;
for( i = h+1; i <= n; i++ ){
buf = a[i];
j = i-h;
while ((j > 0) && (a[j].key < x.key )
{ a[j + h] = a[j];
j--;
}
}
a[j + h] = buf;
}while (h <= 1);
}
Быстрая сортировка с ограниченной рекурсией на языке Java
protected static void Sort(tItem a[], int L, int R)
{
tItem x;
tItem y;
int i;
int j;
while(L < R)
{
x = a[(L + R) / 2];
i = L; j = R;
do
{
while (a[i].Key < x.key) { i++; };
while (x.key < a[j].Key) { j--; };
if (i <= j)
{
y = a[i];
a[i] = a[j];
a[j] = y;
i++;
j--;
}
}while (i <= j);
if (j - L < R - i )
{
Sort(a, L, j);
L = i;
}
else
{
Sort(a, i, R);
R = j;
}
}
}
static void QuickSort(tItem a[], int n)
{
Sort(a, 1, n);
}
Сортировка простым выбором
Число сравнений ключа:
Число пересылок:
;
Быстрая сортировка с ограниченной рекурсией
Число сравнений ключа:
C = n + (2*n/2) + (4*n/4) + … + (n*n/n) = n * k = n * log( n );
Число пересылок:
Исследование сортировки Шелла при разных
параметрах алгоритма
Последовательность предложенная Кнутом: все значения kk = 3*kk + 1
Последовательность
предложенная Хиббардом: все значения
; такая последовательность шагов приводит
к алгоритму сложностью O(N3
/ 2);
Последовательность
предложенная Седжвиком:
,
если i четное и
,
если i нечетное. При использовании таких
приращений средняя сложность алгоритма
составляет: O(n7 / 6), а в худшем случае
порядка O(n4
/ 3).
Число сравнений ключа
Кол-во элементов: |
Кнут |
Хиббард |
Седжвик |
||||||
Случайный массив |
Отсортированный массив |
Обратно отсортированный массив |
Случайный массив |
Отсортированный массив |
Обратно отсортированный массив |
Случайный массив |
Отсортированный массив |
Обратно отсортированный массив |
|
500 |
5868 |
2321 |
4625 |
6485 |
3253 |
5120 |
8172 |
1830 |
6187 |
1000 |
14650 |
4821 |
10804 |
15286 |
7498 |
11433 |
18394 |
5116 |
14050 |
1500 |
24631 |
8457 |
16707 |
24746 |
12487 |
18537 |
28823 |
8116 |
20000 |
2000 |
33495 |
11457 |
20625 |
34159 |
16987 |
24738 |
41734 |
11116 |
28310 |
2500 |
45452 |
14457 |
29859 |
45490 |
22964 |
31237 |
50674 |
15687 |
35958 |
3000 |
56105 |
17457 |
37155 |
58661 |
27964 |
41468 |
64044 |
19187 |
44595 |
3500 |
67597 |
22864 |
37867 |
67323 |
32964 |
46082 |
78452 |
22687 |
53115 |
4000 |
78568 |
26364 |
49142 |
81714 |
37964 |
54312 |
88141 |
28026 |
65563 |
4500 |
90293 |
29864 |
55112 |
96014 |
45417 |
59734 |
103206 |
32026 |
67417 |
5000 |
103250 |
33364 |
57866 |
109096 |
50917 |
68816 |
117978 |
36026 |
78504 |
Время
Кол-во элементов: |
Кнут |
Хиббард |
Седжвик |
||||||
Случайный массив |
Отсортированный массив |
Обратно отсортированный массив |
Случайный массив |
Отсортированный массив |
Обратно отсортированный массив |
Случайный массив |
Отсортированный массив |
Обратно отсортированный массив |
|
500 |
1,135 |
0,181 |
0,648 |
1,237 |
0,391 |
0,762 |
1,586 |
0,075 |
0,954 |
1000 |
3,291 |
0,747 |
1,888 |
3,619 |
1,325 |
2,065 |
4,028 |
0,803 |
2,557 |
1500 |
5,426 |
1,507 |
3,134 |
5,824 |
2,398 |
3,581 |
6,384 |
1,462 |
3,802 |
2000 |
7,795 |
2,202 |
3,955 |
8,324 |
3,365 |
4,846 |
9,029 |
2,116 |
5,192 |
2500 |
10,387 |
2,808 |
5,516 |
11,093 |
4,692 |
5,97 |
11,725 |
3,091 |
6,808 |
3000 |
12,887 |
3,471 |
7,044 |
13,913 |
5,414 |
8,039 |
14,641 |
3,845 |
8,607 |
3500 |
15,838 |
4,664 |
7,257 |
16,51 |
6,541 |
9,159 |
17,237 |
4,605 |
10,314 |
4000 |
18,513 |
5,394 |
9,56 |
19,652 |
7,561 |
10,778 |
20,361 |
5,42 |
12,572 |
4500 |
21,442 |
5,839 |
10,843 |
22,913 |
9,196 |
11,744 |
23,264 |
6,293 |
13,089 |
5000 |
24,214 |
6,576 |
11,095 |
25,846 |
10,388 |
13,684 |
26,407 |
7,03 |
15 |