Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_МЕТ№1.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
180.74 Кб
Скачать

Задача сортировки

Сортировка – это расположение чисел в порядке возрастания или убывания.

Наиболее распространенный и простой метод сортировки – метод "пузырька". Он требует минимального объема памяти для данных, но затраты времени на этот метод велики. Суть метода "пузырька" в следующем.

Пусть дано n чисел и необходимо расположить их (для определенности) в порядке возрастания. При упорядочении выполняются следующие операции:

1) Числа сравниваются попарно: первое со вторым; второе с третьим;

i-тое – с (i+1)-ым;

2) Если меньшее стоит в паре на втором месте, то числа меняются местами.

За один такой просмотр массива минимальное число "вытолкнется", по крайней мере, на одно место вверх (вперед), а максимальное – переместится в самый конец (вниз). Т.е. минимальное число как легкий пузырек воздуха в жидкости постепенно "всплывает" в начало последовательности. Отсюда – название метода. За n-1 просмотр произойдет полное упорядочение массива при любом исходном расположении чисел в нем. Рассмотрим работу метода на примере, приведенном на рис. 11.

Рис1.11. Иллюстрация метода сортировки "пузырьком"

Алгоритм сортировки.

1. Ввести n чисел.

2. Для номера просмотра от 1 до n-1.

2.1. Для номера числа(i) от 1 до n-1.

Если число[i] > число[i+1], то поменять их местами.

3. Вывести отсортированную последовательность.

4. Закончить.

Программа для этого алгоритма будет иметь вид:

PROGRAM SORT;

CONST

N=100;

VAR

X:ARRAY [1..N] OF REAL;

A:REAL;

K,I:INTEGER;

BEGIN;

Writeln('Введите массив чисел');

FOR I:=1 TO N DO

READ (X[I]);

{ сортировка }

FOR K:=1 TO N-1 DO

FOR I:=1 TO N-1 DO

IF X[I]>X[I+1]THEN

BEGIN

A:=X[I];

X[I]:=X[I+1];

X[I+1]:=A

END;

Writeln('Отсортированный массив чисел');

FOR I:=1 TO N DO

WRITE (X[I]);

END.

Глубину просмотра можно уменьшать, основываясь на том, что большие числа "опускаются" вниз(в конец последовательности) и затем не переставляются:

FOR K :=1 TO N-1 DO

FOR I:=1 TO N-K DO

IF......

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

План для этого метода

1. Ввести массив.

2. Признак – перестановка есть.

3. N% просмотра (к)=1.

4. Пока перестановки есть отсортировать массив.

5. Вывести результат.

6. Закончить.

Уточненный план.

1. Ввести массив.

2. Признак - перестановка есть.

3. номер просмотра (к)=1.

4. Пока перестановка есть.

4.1. Количество перестановок =0.

4.2. Для i от 1 до n-k

Если x[i] > x[i+1], то

4.2.1. поменять x[i] и x[i+1]

4.2.2. кол.перест.=кол.перест.+1

4.3. Если кол.перест.=0, то

признак – перестановок.нет.

4.4. к=к+1

5. Для i от 1 до n

Вывести x[i].

6. Закончить.

Программа для этого алгоритма будет иметь вид:

PROGRAM SORTUSK;

CONST

N=100;

VAR

X:=ARRAY [1..N] OF REAL;

A:REAL;

L,K,I:INTEGER;

P: BOOLEAN;

BEGIN

{п.1}

Writeln('Введите массив чисел');

FOR I:=1 TO N DO

READ (X[I]);

{ п.2 }

P:= TRUE; {перестановки будут}

{ п.3 }

K:=1; {номер просмотра}

{ п.4 }

WHILE P DO

BEGIN

{ п.4.1 }

L:=0; {кол. перестановок}

{ п.4.2 }

FOR I:=1 TO N-K DO

IF X[I] > X[I+1] THEN

BEGIN

A:=X[I];

X[I]:=X[I+1];

X[I+1]:=A;

L:=L+1

END;

{ п.4.3 }

IF L=0 THEN

P:=FALSE;

{ п.4.4 }

K:=K+1;

END;

{ п.5 }

Writeln('Отсортированный массив чисел');

FOR I:=1 TO N DO

WRITE(X[I]);

END.

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