Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТPascal Сборник конспектов.doc
Скачиваний:
24
Добавлен:
10.11.2018
Размер:
924.67 Кб
Скачать

30. Сортировка элементов массива.

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

Пример массива до сортировки:

5

7

-1

2

-3

Тот же массив после сортировки по возрастанию:

-3

-1

2

5

7

Сортировка методом BubbleSort (методом «пузырька»)

Это самый простой и одновременно самый медленный из методов сортировки. Суть заключается в том, что вдоль массива от его начала к концу проплывает серия «пузырьков». Каждый «пузырек» в процессе движения сравнивает два соседних элемента массива и если они стоят не по росту, то меняет их местами.

Рассмотрим на примере нашего массива:

1й «пузырек».

5

7

-1

2

-3

О

5

7

-1

2

-3

О

5

-1

7

2

-3

О

5

-1

2

7

-3

О

5

-1

2

-3

7

2й «пузырек».

5

-1

2

-3

7

О

-1

5

2

-3

7

О

-1

2

5

-3

7

О

-1

2

-3

5

7

3й «пузырек».

-1

2

-3

5

7

О

-1

2

-3

5

7

О

-1

-3

2

5

7

4й «пузырек».

-1

-3

2

5

7

О

-3

-1

2

5

7

Первый пузырек поставил на свое место самое большое число.

Второй пузырек поставил на свое место второе по росту число.

Третий – третье число. Четвертый – четвертое.

А пятый пузырек и не нужен, так как пятое число автоматически оказалось на своем месте.

Вывод: в общем случае когда чисел n необходимo запускать n-1 пузырек.

Обратим внимание на то, что каждый последующий пузырек проплывает вдоль массива меньшее расстояние, чем предыдущий пузырек.

1й – плыл до 4 элемента (n-1 элемент)

2й – плыл до 3 элемента (n-2 элемент)

3й – плыл до 2 элемента (n-3 элемент)

4й – плыл до 1 элемента (n-4 элемент)

Вывод: в общем случае пузырек номер k должен плыть до n-k элемента.

Проблема: как поменять местами два соседних элемента массива?

Нельзя так: a[i]:=a[i+1]; a[i+1]:=a[i]; при этом одно из чисел будет потеряно.

Зато можно так: p:=a[i]; a[i]:=a[i+1]; a[i+1]:=p; , где p некоторая вспомогательная переменная.

Фрагмент программы, который проводит сортировку по возрастанию:

For k:=1 To n-1 Do

For i:=1 To n-k Do

If a[i]>a[i+1] Then Begin

P:=a[i]; a[i]:=a[i+1]; a[i+1]:=p; End

k – номер пузырька

i – позиция пузырька в массиве

если соседние элементы не по росту, то перестановка

WriteLn(‘Отсортированный массив:’);

For i:=1 To n Do Write(a[i]:4);

WriteLn;

остальные строки – это вывод того, что получилось после сортировки

Следует не забыть объявить в основной программе переменные k и p.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]