Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOSY / 1 блок-все.doc
Скачиваний:
123
Добавлен:
09.05.2015
Размер:
1.38 Mб
Скачать

6.Основные алгоритмы обработки данных: сортировка данных. Простая и быстрая сортировка. Сортировка массива методом пузырька.

Одним из основных способов представления данных является массив. Массив даёт возможность реализации многих алгоритмов:

  1. Ввод данных представленных виде таблицы значений

  2. Вывод данных виде таблицы

  3. Алгоритмы перестановки элементов внутри массива

  4. Определение мах, min элементов массива, сумма элементов массива и т. д. Задачи поиска элементов массива

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

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

Так как можно сравнивать переменные типов integer, real, char и string, то можно сортировать массивы этих типов.

Задача сортировки распространена в информационных системах и используется как предварительный этап задачи поиска, так как поиск в упорядоченном (отсортированном) массиве проводится намного быстрее, чем в неупорядоченном.

Существует много методов (алгоритмов) сортировки массивов. Рассмотрим два метода:

  • Метод прямого выбора.

  • Метод прямого обмена.

Сортировка методом прямого выбора:

  1. Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый – на место минимального.

  2. Просматривая массив от второго элемента, найти минимальный элемент и поместить его на место второго элемента, а второй – на место минимального.

  3. И так далее до последнего элемента.

Program sortarr;

const

SIZE=5;

var

a : array[1..SIZE] of integer;

i : integer; {номер элемента, от которого ведётся поиск минимального элемента}

j : integer; {номер элемента, сравниваемого с минимальным}

buf : integer; {буфер, используемый при обмене элементов массива}

k : integer;

begin

writeln(‘Сортировка массива.’);

write(‘Введите ’, SIZE:3,’целых в одной строке ’);

writeln(‘через пробел и нажмите <Enter>’);

for k := 1 to SIZE do read(a[k]);

writeln(‘Сортировка’);

for i := 1 to SIZE-1 do

begin

{поиск минимального элемента в части массива от a[i] до a[SIZE]}

min := i;

for j := i+1 to SIZE do begin

if a[j]<a[min] then min := j;

{поменяем местами a[min] и a[i]}

buf := a[i];

a[i] := a[min];

a[min] := buf;

{выведем массив}

for k :=1 to SIZE do write(a[k],’ ‘);

writeln;

end;

end;

writeln(‘Массив отсортирован.’);

end.

Сортировка методом прямого обмена

В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим, и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением – к концу массива (тонут), поэтому этот метод иногда называют метод «пузырька». Этот процесс повторяется на единицу меньше раз, чем элементов в массиве.

program sortarr1;

const

SIZE=5;

var

a : array[1..SIZE] of integer;

i : integer; {счётчик циклов}

k : integer; {текущий индекс элемента массива}

buf : integer;

begin

writeln(‘’Сортировка массива пузырьковым методом.);

write(‘Введите ’, SIZE:3,’ целых в одной строке через пробел ’);

writeln(‘и нажмите <Enter>’);

for k:=1 to SIZE do read(a[k]);

writeln(‘Сортировка’);

for i:=1 to SIZE-1

do begin

for k:=1 to SIZE-1

do begin

if a[k]>a[k+1]

then begin

{обменяем k-й и (k+1)-й элементы}

buf:=a[k];

a[k]:=a[k+1];

a[k+1]:=buf;

end;

end;

for k:=1 to SIZE do write(a[k],’ ‘);

writeln;

end;

writeln(‘Массив отсортирован.’);

end.

Сортировка информации - это одна из стандартных функций, возникающих в процессе решения задач самого различного характера. Под сортировкой данных в самом широком смысле слова можно понимать процесс изменения порядка элементов в некоторой информационной совокупности таким образом, чтобы обеспечить возрастание (неубывание) или убывание (невозрастание) числового значения элемента данных или определенного числового параметра, связанного с каждым элементом данных (ключа), при переходе от предыдущего элемента к последующему. Для числовых данных понятия “возрастания” и “убывания” обычно относятся непосредственно к значению чисел - для любой пары натуральных или вещественных чисел определены отношения порядка типа “больше” и “меньше”. Для символьных данных понятия “возрастания” и “убывания” относятся к числовым значениям внутри машинного кода, используемого для представления символов в памяти компьютера. Так как все буквенные символы располагаются в таблице кодов по алфавиту, то сортировка слов текста всегда приводит к их упорядочению в алфавитной (лексикографической) последовательности. Компьютерные информационные системы нельзя представить без возможности отсортировать ту или иную информацию. Типичный пример отсортированной (упорядоченной) информации - это любой словарь, список фамилий, перечень файлов в рабочем окне программы. К настоящему времени известно множество различных алгоритмов, обеспечивающих решение этой задачи. Наиболее известными:

1. Метод сортировки обменами (алгоритм “пузырька”).

2. Метод сортировки вставками.

3. Метод сортировки выбором элемента.

4. Метод разделения (алгоритм “быстрой” сортировки).

5. Метод “пирамиды”.

Поскольку очень многие алгоритмы сортировки используют стандартный процесс обмена значениями между элементами, то эта операция выделена в отдельную процедуру OBMEN с двумя параметрами-переменными. Параметры-переменные передаются по ссылке - фактически операция производится над переменными, указанными в списке параметров при обращении к процедуре или функции. Процедура OBMEN осуществляет обмен значениями между двумя переменными величинами, заданными в качестве ее параметров - она будет использоваться в других процедурах сортировки без дополнительного описания.

procedure OBMEN( var a, b: integer );

var men: integer;

begin

men := a; a := b; b := men

end;

ДОПОЛНИТЕЛЬНО

Поиска элемента равного данному

….. m:=2

for k:=1 to 20 do

if x[k]=2 then

write (`k=`,k);…..

Зеркальной перестановки.

…..For k:=1 to 20 do

Y:=x[k]

X[k]:=x[21-k]

X[21-k]:=y;

Сортировка элементов массива

Сортировка элементов - это процесс перестановки элемента массива так, что они в порядке возрастания или убывания ключа

Ключ или ключевое выражение это математическое выражение, результатом которого является число для каждого элемента массива. Ключ дает своё значение.

Самый простой ключ равен значению элемента массива но может быть равен модулю элемента, функции от элемента.

Алгоритм сортировки не зависит от ключевого выражения.

Существует большое число алгоритмов сортировок, которые принято делить на простые (медленные) алгоритмы и быстрые алгоритмы. Быстрые алгоритмы сортировки гораздо быстрее, но имеют большую сложность.

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

Все алгоритмы сортировки сводятся к поиску и перестановки элементов, что требует применение двух циклов.

Сортировка обмена или сортировка методом «пузырька». Реализуется перестановкой местами соседних элементов.

…..Repeat

M:=0

For k:=1 to 19 do

If x[k]>x[k+1] then

Begin

Y:=X[k];

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

X[k+1]:=Y;

M:=M+1;

End;

Until M:=0;

Сортировка выбора. В данном алгоритме необходимо в цикле организовать поиск min(max) элемента найдя элемент его ставят на нужное место.

…..For i:=0 to 19 do

Y:=x[i];

M:=I;

For k:=i+1 to 20 do

If y>x[k] then

Begin

Y:=x[k] ;

M:=k;

End;

x[M]:=x[i];

x[i]:=y;

end;…..

Соседние файлы в папке GOSY