Сортировка Шелла и Быстрая сортировка с ограниченной рекурсией



Вологодский государственный педагогический университет

Факультет прикладной математики и компьютерных технологий

 

 

Индивидуальное задание по исследованию алгоритмов Сортировки

 

Выполнил:

студент II курса факультета ПМ и КТ

Попов Максим Сергеевич

 

Принял:

Свердлов Сергей Залманович

 

 

Вологда

2011

 

Вариант задания

Вариант 20

 

Таблица 1. Вариант задания

    

  Алгоритмы

Сортировка простым выбором
Сортировка методом Д.Шелла
Быстрая сортировка с ограничением рекурсии

 

Использование барьера Не используется

 

Тип ключа Целый (16 разрядов)
Тип данных Целый (16 разрядов)

 

 Исследуемые    характеристики

Время сортировки
Число сравнений ключа
Число пересылок

 

Изменяемые величины

Число элементов
Параметры алгоритма

 

Исследуемые варианты

Случайный массив
Отсортированный массив
Обратно отсортированный массив

 

 

Обзор алгоритмов

Const

nmax = 5000;

Type

tKey = integer;

tData = integer;

tItem = record

Key : tKey;

Data: tData;

end;

tArray=array[1..nmax] of tItem;

Сортировка простым выбором

procedure SelectSort(var a: tArray; n: integer);

Var

i, j, jmin: integer;

buf: tItem;

Begin

for i := 1 to n-1 do begin

    jmin := i;

    for j := 1 to i-1 do

        if a[j].key > a[jmin].key then

            jmin := j;

    buf := a[i];

    a[i] := a[jmin];

    a[jmin] := buf;

end;

end.

 

Сортировка методом Д . Шелла

 

procedure ShellSort(var a: tArray; n: integer);

Var

i, j, h: integer;

x: tItem;

Begin

h:=13;

while h<n do

h:=3*h + 1;

h:=(h - 1) div 3;

Repeat

h:=(h - 1) div 3;

for i:=h + 1 to n do begin

    x:=a[i];

    j:=i - h;

    while (j > 0) and (x.key < a[j].key) do begin

       a[j + h]:=a[j];

       j:=j - h;

    end;

a[j + h]:=x;

  end;

until h <= 1;

end;

 

 

Быстрая сортировка с ограничением рекурсии

 

procedure QuickSort(var a: tArray; n: integer);

procedure Sort(L, R: integer);

Var

i, j: integer;

x, y: tItem;

Begin

while L < R do begin

    i:=L; j:=R;

    x:=a[(L + R) div 2];

    repeat

       while x.key > a[i].key do i:=i + 1;

       while a[j].key > x.key do j:=j - 1;

       if i <= j then begin

          y:=a[i];

          a[i]:=a[j];

          a[j]:=y;

          i:=i + 1; j:=j - 1;

       end;

   until i > j;

   if i – L < R - j then begin

       Sort(L, j);

       l:=i;

   end

Else begin

       Sort(i, R);

       R:=j;

   end;

end;

end;

Begin

Sort(1, n);

end;

 

 


Случайный массив

Кол-во элементов

Сортировка простым выбором

Сортировка методом Шелла

Быстрая сортировка с огрн. рек.

Время Число сравнений ключа Число пересылок Время, с Число сравнений ключа Число пересылок Время, с Число сравнений ключа Число пересылок
500

1601,836757

124750

1497

113,4477251

5957

8022

72,4017339

5485

3576

1000

6402,887609

499500

2997

329,4280674

14637

19705

226,6895285

11617

7797

1500

14361,43253

1124250

4497

531,1959487

23253

33046

409,7542766

17808

12162

2000

25499,92922

1999000

5997

785,9783052

33325

45641

534,9147375

24202

16926

2500

39851,71764

3123750

7497

1045,06517

45258

59638

720,8894591

33719

21534

3000

57324,3712

4498500

8997

1314,571237

58979

74392

889,6958959

38952

26658

3500

77883,43558

6123250

10497

1579,657417

64949

91423

1070,716681

44815

31608

4000

101667,0398

7998000

11997

1850,444684

79354

104202

1233,883258

55370

37080

4500

128585,2259

10122750

13497

2130,315735

91413

118119

1421,656056

58721

42264

5000

158523,8082

12497500

14997

2364,401484

105132

133656

1601,547939

72546

47817

 

Отсортированный массив

Кол-во элементов

Сортировка простым выбором

Сортировка методом Шелла

Быстрая сортировка с огрн. рек.

Время Число сравнений ключа Число пересылок Время, с Число сравнений ключа Число пересылок Время, с Число сравнений ключа Число пересылок
500

1601,39662

124750

1497

19,0812573

2321

4642

14,8805805

4023

771

1000

6388,966313

499500

2997

69,9939788

4821

9642

74,3388895

9045

1563

1500

14356,22485

1124250

4497

150,6567637

8457

16914

149,1735951

14962

2970

2000

25544,21216

1999000

5997

210,476764

11457

22914

198,9575831

20163

3219

2500

39835,13891

3123750

7497

280,2481636

14457

28914

276,0115434

26506

4614

3000

57367,18554

4498500

8997

347,0238535

17457

34914

357,8946275

32939

6012

3500

78021,87746

6123250

10497

463,4552023

22864

45728

415,9816192

38793

6396

4000

101943,1232

7998000

11997

536,5044669

26364

52728

475,8422242

44563

6753

4500

128935,1281

10122750

13497

581,8522369

29864

59728

522,3087196

51408

8010

5000

159144,7316

12497500

14997

658,2673603

33364

66728

608,4132491

58380

9564

Обратно отсортированный массив

Кол-во элементов

Сортировка простым выбором

Сортировка методом Шелла

Быстрая сортировка с огрн. рек.

Время Число сравнений ключа Число пересылок Время, с Число сравнений ключа Число пересылок Время, с Число сравнений ключа Число пересылок
500

1587,29439

124750

1497

61,095304

4627

6950

21,1533577

3778

1512

1000

6323,765326

499500

2997

189,7683288

10800

15625

84,3938507

8561

3072

1500

14225,0402

1124250

4497

311,5236291

16716

25172

170,7748294

14229

5223

2000

25295,59026

1999000

5997

408,3120362

20634

32088

226,2148742

19128

6222

2500

39505,04711

3123750

7497

550,1877857

29853

44322

318,2928401

25333

8304

3000

56842,79165

4498500

8997

700,0719592

37151

54601

408,6996313

31498

10503

3500

77417,90677

6123250

10497

796,435305

37866

60724

471,1712062

37030

11694

4000

101143,9112

7998000

11997

953,2062336

49127

75486

537,6662122

42587

12726

4500

127890,5549

10122750

13497

1082,117967

55114

84977

591,3859857

49104

14859

5000

158054,8388

12497500

14997

1210,459579

57883

91241

691,4279534

55831

17010

 

Число сравнений ключа

Число сравнений ключа

Сортировка Шелла и Быстрая сортировка с ограниченной рекурсией

Сортировка простым выбором

 

Сортировка Шелла и Быстрая сортировка с ограниченной рекурсией

Число пересылок


        

 

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

    Сортировка методом Шелла:  используется сортировка вставками, применяя принцип уменьшения расстояния между сравниваемыми элементами. Сначала сортируются все элементы, которые смещены друг от друга на три позиции. Затем сортируются все элементы, которые смещены на две позиции. И, наконец, упорядочиваются все соседние элементы.

 

    Быстрая сортировка с ограниченной рекурсией: выбирается для сравнения один элемент х, отыскивается слева первый элемент, который не меньше х, а справа первый элемент, который не больше х. Найденные элементы меняются местами. После первого же прохода все элементы, которые меньше х, будут стоять слева от х, а все элементы, которые больше х, - справа от х. С двумя половинами массива поступают точно также. Продолжая деление этих половин до тех пор пока не останется в них по 1 элементу.


Дата добавления: 2021-01-20; просмотров: 42; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!