Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_programmirovanie / Praktikum_programmirovanie.doc
Скачиваний:
65
Добавлен:
30.03.2015
Размер:
15.88 Mб
Скачать

Лабораторная работа №4 Работа с одномерными массивами

Массив – это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки памяти. Все элементы имеют одно имя – имя массива и отличаются индексами – порядковыми номерами в массиве. Количество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выполняется на этапе компиляции программы. Массивы определяются следующим образом:

int a[100];//массив из 100 элементов целого типа

Важно помнить Элементы массива нумеруются с нуля!!!

45

352

63

124

значения элементов массива

0

1

2

…..

99

индексы элементов массива

Чтобы обратиться к элементу массива, надо указать имя массива и номер элемента в массиве (индекс):

a[0] – индекс задается как константа,

a[55] – индекс задается как константа,

a[i] – индекс задается как переменная,

a[2*i] – индекс задается как выражение.

Элементы массива можно задавать при его определении:

int a[10]={1,2,3,4,5,6,7,8,9,10};

int a[]={1,2,3,4,5};

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

Сортировка – это процесс перегруппировки заданного множества объектов в некотором установленном порядке.

Сортировка методом пузырьков (метод простого обмена)

Алгоритм сортировки методом пузырька (bubble sort) сравнивает между собой соседние элементы и меняет их местами, если они нарушают порядок. Для этого приходится несколько раз просматривать одни и те же элементы. Во время первого прохода сравниваются два первых элемента массива; если они нарушают порядок, их меняют местами. Затем сравнивается другая пара, т.е. 2-й и 3-й элементы. Если они нарушают порядок, их меняют местами. Просмотр, сравнение и обмен двух элементов выполняется до тех пор, пока не будет достигнут конец массива.

На рис. изображены первые два прохода при сортировке массива. состоящего из пяти целых чисел, методом пузырька: а) первый проход; б) второй проход

Хотя после первого прохода массив остается неупорядоченным, наибольший элемент оказывается в конце массива, "всплывая", как пузырек на поверхность воды. Во время второго прохода нужно вернуться к началу массива и обработать его точно так же, как и в первый раз, останавливая обработку на предпоследнем элементе. Таким образом, при втором проходе просматриваются n-l элемент массива.

for(int i=1;i<n;i++)

for(int j=n-1;j>=i;j--)

if(a[j]<a[j-1])

{

int r=a[j];

a[j]=a[j-1];

a[j-1]=r;

}

}

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

Представьте себе колоду карт, из которой каждый раз вынимается и вставляется на указанное место одна карта. Такой способ упорядочения называется сортировкой методом вставок (insertion sort). В данном случае массив делится на две части: упорядоченную и неупорядоченную, как показано на рис.

Вначале весь массив неупорядочен. На каждом шаге метода вставок из неупорядоченной части извлекается первый элемент, который затем вставляется в нужное место упорядоченной части. Первый шаг тривиален: переместить нулевой элемент из неупорядоченной части в упорядоченную. Для этого даже не нужно переставлять элементы массива. Следовательно, этот шаг можно пропустить, считая, что этот элемент уже принадлежит упорядоченной части, а неупорядоченной частью массива является отрезок 1 ..N-1. Поскольку на каждом шаге размер упорядоченной части увеличивается на единицу, а размер неупорядоченной части, соответственно, на единицу уменьшается, в момент окончания алгоритма весь массив окажется упорядоченным.

На рис. показаны результаты сортировки массива, состоящего из пяти целых чисел, методом вставок. В исходном положении упорядоченная часть массива состоит из единственного нулевого элемента, равного 29, а к неупорядоченной части относятся все остальные элементы массива.

Извлечем из неупорядоченной части массива ее первый элемент - число 10 и вставим в соответствующее место упорядоченной части. Для этого понадобится сдвинуть элементы массива, чтобы освободить место для вставляемого числа. Снова извлечем из вновь образованной неупорядоченной части массива ее первый элемент - число 14 - и вставим в соответствующее место упорядоченной части и т.д.

int i,j,x;

for(i=1;i<n;i++)

{

x=a[i]; // запомнили элемент, который будем вставлять

j=i-1;

while(x<a[j]&&j>=0) // поиск подходящего места

{

a[j+1]=a[j]; // сдвиг вправо

j--;

}

a[j+1]=x; // вставка элемента

}