Алгоритм сортировки обменом и оценка его эффективности Общая идея алгоритма Слева направо поочередно сравниваются ключи двух соседних элементов. Если их порядок не соответствует заданному отношению, то эти элементы меняются местами. Далее осуществляется сдвиг вправо па один элемент и анализируется следующая пара. Просмотр массива завершается после сравнения ключей элементов, находящихся в предпоследней (n-1)-й и последней n-й позициях. После первого просмотра массива элемент с наибольшим значением ключа займет позицию n, а с наименьшим - переместится на одну позицию к началу массива. Второй просмотр выполняется аналогично, но завершается сравнением элементов в позициях n-2 и n-1, поскольку максимальный элемент уже занял свою позицию. Таким образом, на каждом просмотре очередные наибольшие элементы будут занимать позиции n, n-1, n-2, ..., 2, а всего потребуется n-1 просмотров. Ускорение работы алгоритма может быть достигнуто следующим образом. На каждом просмотре фиксируется факт наличия или отсутствия обменов. Если на очередном просмотре обменов не было, то элементы упорядочены и сортировка завершена. Наиболее известной является сортировка пузырьковым методом. Ее популярность объясняется запоминающимся названием и простотой алгоритма. Сортировка пузырьковым методом использует метод обменной сортировки. Ниже показана самая простая форма программы сортировки методом пузырька массива a[1..n].: procedure obmen(var a : mas; n : byte); var i, j: byte; vsp : integer; begin for i := 1 to n - 1 do for j := 1 to n - i do if a[j]>a[j+1] then begin vsp:=a[j]; a[j]:=a[j+1]; a[j+1]:=vsp; end end; Сортировка пузырьковым методом имеет два цикла. Поскольку число элементов массива задается переменной n, внешний цикл вызывает просмотр массива n - 1 раз. Это обеспечивает нахождение каждого элемента в своей позиций после завершения процедуры. Внутренний цикл предназначен для фактического выполнения операций сравнения и обмена. При анализе всякой сортировки определяется число операций сравнения и обмена, выполняемых в лучшем, среднем и худшем случаях. Для сортировки пузырьковым методом число сравнений остается неизменным, поскольку два цикла всегда выполняются заданное число раз вне зависимости от упорядоченности исходного массива. Это означает, что при сортировке пузырьковым методом всегда выполняется 1/ 2 (n2-n) операций сравнения, где "n" задает число сортируемых элементов массива. Эта формула выводится на том основании, что внешний цикл сортировки пузырьковым методом выполняется n-1 раз, а внутренний цикл выполняется n/2 раз. Их перемножение даст указанную формулу. Число операций обмена будет нулевым для наилучшего случая, когда исходный массив уже является отсортированным. Число операций обмена для среднего случая будет равно 3/4 (n2-n), а для наихудшего случая будет равно 3/2 (n2-n) раз. Можно заметить, что по мере ухудшения упорядоченности исходного массива число неупорядоченных элементов приближается к числу сравнений (каждый неупорядоченный элемент требует три операции обмена). Сортировку пузырьковым методом называют квадратичным алгоритмом, поскольку время его выполнения пропорционально квадрату числа сортируемых элементов. Сортировка большого числа элементов пузырьковым методом потребует очень много времени, т.к. время выполнения сортировки находится в квадратичной зависимости от числа элементов массива.