Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инф ответы 1-21.docx
Скачиваний:
59
Добавлен:
24.09.2019
Размер:
1.23 Mб
Скачать

5. Внутренняя сортировка данных методом «пузырька». Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.

Сортировка простыми обменамисортировка пузырьком — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Сложность алгоритма: O(n²), Число сравнений: N2

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

Сортировка очень медленная, но если скорость не главное, можно применить и её.

Принцип действия:

Сортировка обменом основана на многократном обходе массива чисел a1, a2,… an. При каждом обходе сравниваются два соседних элемента ai и ai+1. Если элементы неупорядочены, то они меняются местами. В следствие последовательных перестановок, например, при упорядочивании массива по возрастанию, постепенно продвигается вправо и становится на свое место максимальный элемент массива. При втором обходе – длина массива уменьшается на 1 (исключается последний элемент) и процесс повторяется. Последний обход выполняется для массива из 2 элементов.

Пример:

Отсортировать массив чисел M={5, 4, 8, 2, 9} по возрастанию.

1-ый просмотр. Рассматривается весь массив.

{i - номер первого элемента проверяемой (сравниваемой) пары}.

i=1

5

>

4

8

2

9

меняем местами

i=2

4

5

<

8

2

9

не меняем

i=3

4

5

8

>

2

9

меняем

i=4

4

5

2

8

<

9

не меняем

Число 9 встало на свое место и в последующих просмотрах его можно не рассматривать.

2-ой просмотр. Рассматривается весь массив, с первого элемента до предпоследнего.

i=1

4

<

5

2

8

9

не меняем

i=2

4

5

>

2

8

9

меняем

i=3

4

2

5

<

8

9

не меняем

Число 8 также встало на свое место. Говорят, «всплыл» еще один «пузырек».

3-ий просмотр. Рассматривается часть массива без последних двух элементов.

i=1

4

>

2

5

8

9

меняем

i=2

2

4

<

5

8

9

не меняем

Число 5 встало на свое место.

4-ый просмотр. Рассматривается последняя пара элементов.

i=1

2

<

4

5

8

9

не меняем

В итоге имеем отсортированный массив:

2

4

5

8

9

Пример программы:

#include<stdio.h>

#define N 1000

int main() {

int n, i, j;

int a[N];

// считываем количество чисел n

scanf("%d", &n);

// считываем n чисел

for(i = 0 ; i < n; i++) {

scanf("%d", &a[i]);

}

for(i = 0 ; i < n ; i++) {

// сравниваем два соседних элемента.

for(j = 0 ; j < n - i - 1 ; j++) {

if(a[j] > a[j+1]) {

// если они идут в неправильном порядке, то

// меняем их местами.

int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp;

}

}

}

}

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