Упорядочение массива по возрастанию

Упорядочения массивов по какому-либо признаку называ­ются также сортировками. Существуют различные методы сортировок, различающиеся, в основном, по скорости получе­ния результата. Рассмотрим один из них — «метод пузырька». Пусть имеется последовательность чисел a1, а2,..., an, кото­рую необходимо упорядочить по возрастанию. Зафиксируем первый элемент и будем последовательно сравнивать его со стоящими справа. Если какой-то из элементов справа окажет­ся меньше первого, то мы поменяем местами этот элемент с первым и продолжим сравнение уже нового элемента, стоя­щего на первом месте, с оставшимися справа числами. Если снова выявится элемент, меньший зафиксированного, то пов­торим перестановку. В результате первого просмотра последо­вательности на первом месте окажется наименьший из всех элементов, т. е. он, как более «легкий», как бы всплывает на­верх (отсюда и название метода — «метод пузырька»). Теперь зафиксируем второй элемент и повторим просмотр, выполняя при необходимости перестановки элементов, и т. д. Уяснив идею решения, остановимся на двух вопросах: каким образом фиксировать элементы и как осуществить перестановку двух элементов? Чтобы при переборе элементов, стоящих справа от проверяемого, не менялся индекс последнего, индексы фик­сируемого и стоящих правее него элементов должны быть раз­личными: i и j. Индекс i изменяется от 1 до п — 1, индекс j всегда на 1 больше i и пробегает все значения от i + 1 до n. Для каждого значения i индекс j должен последовательно при­нять все допустимые значения, следовательно, конструкция программы, отражающая полный перебор всех элементов и их упорядочение по возрастанию, представляет собой двойной цикл. При перестановке двух элементов используется третья переменная. Перестановка местами (обмен значениями в па­мяти) двух переменных а и b выглядит следующим образом:

1) с: = а;

2) a: = b;

3) b: = с.

Программа сортировки методом пузырька имеет вид:

program Р14;

const n = 7;

var a: array [ 1.. n ] of real; i, j: integer; c: real;

Begin

for i: = 1 to n do

Begin

write (‘a [‘, i, ‘] = ‘);

readln (a [ i ])

end;

for i: = 1 to n - 1 do

for j: = i + 1 to n do

if a [ i ] > a [ j ]

Then begin

c: = a [ i ];

a[i]:= a[j];

a [ j ]: = c

end;

writeln (‘упорядоченный по возрастанию массив ‘);

for i:= 1 to n do

write (a [ i ]);

End.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: