Сортировка методом простого обмена (метод пузырька) Рекурсивная сортировка
Сортировка простыми обменами, сортировка пузырьком Для понимания и реализации этот алгоритм простейший, но эффективен он лишь для небольших массивов. Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяется сортировка вставками. Пример сортировки пузырьком списка случайных чисел.
Принцип метода пузырька Весь массив просматривается несколько раз, причем при каждом просмотре сравниваются значения двух соседних элементов. Если эти значения следуют не в порядке возрастания, то производится их перестановка. Так происходит до тех пор, пока не будет сделано ни одной перестановки.
Пример процедуры сортировки, использующей метод пузырька Procedure Float (n:integer; var t:mass); Var i,j,h: integer; BEGIN For i:=2 to n do For j:=n downto i do If t[j]<t[j-1] then Begin h:=t[j]; t[j]:=t[j-1]; t[j-1]:=h; End; END;
Принцип метода простых обменов Весь массив просматривается несколько раз и при каждом просмотре ищется минимальный по значению элемент, который меняется местами с первым, вторым, третьим, …, предпоследним элементов массива и исключается из дальнейшего рассмотрения.
Пример процедуры сортировки, использующей метод простых обменов Procedure Obmen (n:integer; var t: mass); Var i, j, min, ind, h: integer; BEGIN For i:=1 to n-1 do Begin min:=t[i]; ind:=i; For j:=i+1 to n do If t[j] < min then Begin min:=t[j]; ind:=j; End; h:=t[i]; t[i]:=t[ind]; t[ind]:=h; End; END;
Сортировка массива с помощью рекурсии В некотором отрезке массива выбирается центральное (серединное) значение; все элементы из левой части отрезка, превосходящие центральное значение, перемещаются в правую часть, и наоборот. На следующем шаге (для которого используются рекурсивные вызовы этой же процедуры) алгоритм повторяется для обоих частей отрезка.
Процедура, упорядочивающая по возрастанию значения из массива Massiv в диапазоне индексов Left..Right Procedure QuickSort (Left, Right : integer; Var Massiv : Array1); Var i, j, x, y : integer; BEGIN i := Left; j := Right; x := Massiv[(Left+Right) div 2]; Repeat While Massiv[i] x do Dec(j); If i j; If Left<j then QuickSort (Left, j); If i<Right then QuickSort (i, Right); END;
Решение задач Отсортировать массив по возрастанию, используя процедуру Swap, которая меняет местами 2 элемента. Составьте алгоритм, упорядочивающий элементы массива, стоящие на нечетных местах, в возрастающем порядке, а на четных - в убывающем. Дана вещественная матрица размером 7x4. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (один из них) оказался в левом верхнем углу. Дан упорядоченный целочисленный массив. Сформировать второй массив всех таких различных значений, которые в первом массиве встречаются по два и более раза.