Примеры обработки массивов данных

 

Рассмотрим основные действия над элементами массивов на примерах.

Пример 1. Обработка одномерного массива.

Вычислить % дней в месяце, когда температура опускалась ниже 00С.

Решение

Для упрощения вычислений введем следующие обозначения:

all_d – всего дней в месяце (примем значение all_d =31);

cold_d– количество холодных дней;

t – массив температур за месяц;

pr – процент дней с отрицательной температурой.

 

Текст программы Coldна языке Паскаль

 

Program Lk_6_1;

{$APPTYPE CONSOLE}

uses

SysUtils,

Windows;

 

Type days = array[1..31] of real;

Var t: days;

pr: real;

cold_d,all_d:integer;

i: integer;

Begin

SetconsoleoutputCP(1251);

Writeln('Введите количество дней в месяце');

Readln(all_d);

Writeln('Введите массив температур за месяц - t');

For i:= 1 to all_d do

Read(t[i]);

cold_d:=0;

For i:= 1 to all_d do

If t[i]<0 Then cold_d:=cold_d+1;

pr:=cold_d/all_d*100;

Writeln('Холодных дней',cold_d:2,' это ',pr:5:2,' %');

Sleep(10000)

End.

 

Пример 2. Обработка двумерного массива.

Найти след матрицы А(MxM).

 

Program Sled;

Var A:array[1..10,1..10] of real;

Sl:Real;

Begin

Writeln('Введите размер матрицы А -- M');

Readlm(M);

Writeln('Введите матрицу А');

For i:= 1 to M do

For j:= 1 to M do

Readln(A[I,j]);

Sl:=0;

For I:=1 To M Do

Sl:=Sl+A[I,I];

Writeln('След матрицы А=',Sl:0:2);

End.

 

Сортировка массивов

Упорядочивание элементов совокупности позволяет упростить дальнейший поиск или представить полученные результаты в более понятном виде. Рассмотрим основные определения.

Сортировкой называется процесс упорядочивания набора данных одного типа по возрастанию или убыванию значения какого-либо признака [1].

Массив, например, массив А={a1, a2, …, an}, является отсортированным (упорядоченным) по возрастанию, если для всех индексов i из интервала выполняется условие .

Сортировка строк – это ранжирование данных строкового типа по алфавиту. Фактически символы, составляющие строку, упорядочиваются по их номеру в кодовой таблице ASCII. Наиболее часто сортировку строк выполняют при выводе различных списков (фамилий, названий).

Различают обменные сортировки, сортировки выбором, сортировку вставками, сортировку слиянием.

Предположим, что имеется исходный массив А={a1, a2, …, a10}, который необходимо упорядочить по возрастанию.

Обменные сортировки

Суть обменных сортировок заключается в следующем. Сначала последовательно просматриваются элементы a1, …, an и находится наименьшее i, такое, что ai>ai+1. Затем элементы ai и ai+1 меняются местами, и просмотр возобновляется с ai+1 элемента, и т.д. Тем самым, наибольшее число передвигается на последнее место. Следующие просмотры начинаются опять сначала, уменьшая на единицу количество просматриваемых элементов. Массив будет упорядочен после просмотра, в котором участвовали только первый и второй элементы. Процесс сортировки по убыванию будет аналогичен.

В пределах этого вида можно выделить такие методы сортировок, как метод «пузырька»; метод улучшенной «пузырьковой» сортировки; метод быстрой сортировки.

Для сортировки методом «пузырька» массив последовательно просматривается несколько раз. Каждый просмотр состоит из сравнения каждого элемента массива ai с элементом ai+1 и обмена этих двух элементов, если они расположены не в нужном порядке.

Пример 1. Пусть задан массив А, состоящий из элементов: А={25; 57; 48; 37; 12; 92; 86; 33}. Упорядочить его по возрастанию значений элементов.

Решение

На первом просмотре делаем следующие сравнения:

а1 с а2 (25 и 57) – нет обмена;

а2 с а3 (57 и 48) – обмен;

а3 с а4 (57 с 37) – обмен;

а4 с а5 (57 с 12) – обмен;

а5 с а6 (57 с 92) – нет обмена;

а6 с а7 (92 с 86) – обмен;

а7 с а8 (92 с 33) – обмен.

Таким образом, после первого просмотра элементы массива будут располагаться в таком порядке:

25 48 37 12 57 86 33 92.

После первого просмотра наибольший элемент 92 находится в нужной позиции. В общем случае элемент а(n-i+1) будет находиться в нужной позиции после i-той итерации. Этот метод называется «методом пузырька» потому, что каждое число, словно пузырек, медленно всплывает вверх в нужную позицию.

После второго просмотра получим последовательность:

25 37 12 48 57 33 86 92.Элемент 86 на нужном месте.

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

1-ая итерация               92;
2-ая итерация               92;
3-ая итерация               92;
4-ая итерация               92;
5-ая итерация               92;
6-ая итерация               92;
7-ая итерация               92.

 

Метод улучшенной «пузырьковой» сортировки основан на методе «пузырька» с той лишь разницей, что количество итераций меньше. Рассмотрим его на примере.

Пример 2. Упорядочим по возрастанию методом «пузырька» массив А, представленный в примере 13.1, а также проиллюстрируем метод улучшенной «пузырьковой» сортировки на примере упорядочивания данного массива по убыванию.

Решение

Создаем вспомогательные массивы В и С. В массиве В будут сохраняться результаты сортировки по убыванию, в массиве С – по возрастанию. Исходный массив А и отсортированные массивы В и С выведем на экран, используя подпрограмму-процедуру.

 

Program Sort1;

Uses CRT;

Type Mas=Array[1..50] Of Integer;

Var A,B,C:Mas;

i,j,p,N:integer;

{Процедура вывода элементов массива}

Procedure Vyvod(M:Integer; Var V:Mas);

Begin

For i:=1 to M do

Write(V[i]:2,' ':2);

Writeln

End;

Begin

Writeln('Введите количество элементов массива А');

Readln(N);

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

For i:=1 to N do

Readln(A[i])

Writeln('Исходный массив');

Vyvod(N,A);

{Сортировка массива по возрастанию методом «пузырька»}

C:=A;

For i:=1 to N do

For j:=1 to N-1 do

If C[j]>C[j+1] Then

Begin

P:=C[j];

C[j]:=C[j+1];

C[j+1]:=P

End;

Writeln('Отсортированный по возрастанию массив А');

Vyvod(N,C);

{Сортировка массива по убыванию методом улучшенной «пузырьковой» сортировки. При использовании метода улучшенной «пузырьковой» сортировки i изменяется от 1 до n-1, j от 1 до n-i}

B:=A;

For i:=1 to N-1 do

For j:=1 to N-i do

If B[j]<B[j+1] Then

Begin

P:=B[j];

B[j]:=B[j+1];

B[j+1]:=P

End;

Writeln('Отсортированный по убыванию массив А');

Vyvod(N,B);

Readln

End.

 

Сеанс работы с программой:

Введите количество элементов массива А

Введите массив А

25 57 48 37 12 92 86 33

Результаты:

Исходный массив А

25.0 57.0 48.0 37.0 12.0 92.0 86.0 33.0

Отсортированный по возрастанию массив А

12.0 25.0 33.0 37.0 48.0 57.0 86.0 92.0

Отсортированный по убыванию массив А

92.0 86.0 57.0 48.0 37.0 33.0 25.0 12.0

 

Метод быстрой сортировки является еще одной реализацией обменных сортировок. Пусть имеется массив А, состоящий из N элементов. Для обозначения индексов элементов воспользуемся двумя переменными – i и j. Полагаем i=1, j=n. Если ai меньше aj, то j уменьшаем на единицу и снова сравниваем ai и aj. После первой перестановки i увеличивается на единицу, и выполняется еще одна перестановка. Затем j уменьшаем на единицу. Процесс сравнения продолжается до тех пор, пока исходный набор не будет упорядочен по возрастанию.

Рассмотрим этот метод на примере сортировки строк.

 

Пример 3. Имеется список бригады рабочих из 10 человек. Упорядочить его по возрастанию методом быстрой сортировки и вывести на экран.

Решение

Обозначим через переменную w строку длиной не более 20 символов (фамилия рабочего), v – массив из 10 элементов (количество рабочих), p – вспомогательная переменная строкового типа для перестановки элементов, i и j – индексы строк в массиве. Программа на языке Паскаль представлена ниже.

 

Program Sort_String;

Uses Crt;

Type W=String[20];

V=Array[1..10] Of W;

Var Fio:V;

I,J:Integer;

P:W;

Begin

Clrscr;

Writeln('Ввод списка бригады');

For I:=1 To 10 Do

Begin

Write(i,' рабочий - ');

Readln(FIO[I])

End;

For I:=1 To 10 Do {Метод быстрой сортировки}

For J:=10 Downto 1 Do

If (FIO[I]>FIO[J]) And (I<=J) Then

Begin

P:=FIO[I];

FIO[I]:=FIO[J];

FIO[J]:=P;

End;

Writeln(‘Отсортированный список бригады’);

For I:=1 To 10 Do

Writeln(Fio[I]);

Readln

End.

 

Сортировки выбором

Наиболее распространены следующие методы этого вида сортировки: с поиском минимального значения; с использованием бинарных деревьев; с использованием метода «турнира с выбыванием»; «пирамидальная» сортировка.

Рассмотрим подробнее первый метод этого вида сортировки – с поиском минимального значения. Суть его заключается в следующем. Сначала в массиве необходимо найти минимальный элемент, затем поменять его местом с первым, затем в усеченном (исключая первый элемент) массиве опять найти минимальный элемент и поставить его на второе место и так далее.

 

Пример 4. Отсортировать по возрастанию массив элементов 1 3 0 9 2.

Решение

Процесс сортировки выбором по методу поиска минимального значения пройдет через следующие шаги:

0:           min=a[3]=0 переставляем a[1] < -- > a[3]
1: 0│         min=a[3]=1 переставляем a[2] < -- > a[3]
2:   1│       min=a[5]=2 переставляем a[3] < -- > a[5]
3:     2│     min=a[5]=3 переставляем a[4] < -- > a[4]
4:           Готово  

Здесь знак │ отделяет отсортированную часть массива от несортированной. Ниже приводится программа, реализующая данный метод.

 

Program Sort2;

Uses Crt;

Var A: Array[1..50] Of Real;

I,J,N,K: Integer;

Min,W: Real;

{Процедура вывода элементов массива}

Procedure Vyvod(M:Integer; Var V:Mas);

Begin

For i:=1 to M do

Write(V[i]:2,' ':2);

Writeln

End;

Begin

Clrscr;

Writeln('Введите количество элементов массива А');

Readln(n);

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

For i:=1 to n do

Read(a[i]);

Writeln;

Writeln('Исходный массив А');

Vyvod(N, A);

{Сортировка массива выбором}

For i:=1 to n do

Begin

min:=a[i]; k:=i;

For j:=i+1 to n do

If a[j]<=min then

Begin min:=a[j]; k:=j end;

{Перестановка i-го и min элементов}

w:=a[i];

a[i]:=a[k];

a[k]:=w;

End;

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

Vyvod(N, A);

readkey

End.

 

Сеанс работы с программой:

Введите количество элементов массива А

Введите массив А

1 3 0 9 2

Исходный массив А

1.0 3.0 0.0 9.0 2.0

Отсортированный массив А

0.0 1.0 2.0 3.0 9.0

Аналогичным данному методу и одним из самых простых методов сортировки является метод прямого выбора. Для его реализации выбирается максимальный элемент. Выбранный элемент меняется местами с последним элементом; процесс повторяется с оставшимися n-1, n-2 элементами и т.д., пока не останется один, самый малый по значению элемент.

 


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



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