Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТ...docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
695.51 Кб
Скачать

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

По отношению к массивам часто возникает задача сортировки по

убыванию или возрастанию. Разработано много различных алгоритмов

сортировки, например, пузырьковая сортировка и быстрая сортировка. В

этом параграфе кратко рассматривается один из простейших алгоритмов

сортировки – сортировка методом выбора наименьшего элемента.

Основные действия алгоритма для сортировки массива длиной L

заключаются в следующем:

Для каждого значения индекса i выполнить два действия:

1) Среди элементов с индексами от i до (L-1)

найти элемент с минимальным значением.

2) Обменять значения i-го и минимального

элементов.

На Си++ алгоритм сортировки можно реализовать в виде трех

функций. Функция высокого уровня будет называться "selection_sort(...)" (у нее

два параметра – сортируемый массив и его длина). Сначала эта функция

вызывает вспомогательную функцию "minimum_from(array,position,length)", которая

возвращает индекс минимального элемента массива "array", расположенного

в диапазоне между индексом "position" и концом массива. Затем для обмена

двух элементов массива вызывается функция "swap(...)".

void selection_sort( int a[], int length )

{

for ( int count = 0; count < length - 1; count++ )

swap( a[count], a[minimum_from(a,count,length)] );

}

int minimum_from( int a[], int position, int length )

{

int min_index = position;

for ( int count = position + 1; count < length; count++ )

if ( a[count] < a[min_index] )

min_index = count;

return min_index;

}

void swap( int& first, int& second )

{

int temp = first;

first = second;

second = temp;

}

Фрагмент программы 8.6

4. Двумерные массивы

Массивы в Си++ могут иметь более одной размерности. В данном

параграфе кратко описаны двумерные массивы. Они широко применяются

для хранения двумерных структур данных, например, растровых

изображений и матриц.

При обработке изображений часто используются битовые маски –

вспомогательные двуцветные (черно-белые) изображения, состоящие

только из 0 (белая точка) и 1 (черная точка) (или, логических значений

"false" и "true"). Предположим, что требуется маска размером 64х32 пиксела.

Для описания соответствующего массива возможны операторы:

const int BITMAP_HEIGHT = 64;

const int BITMAP_WIDTH = 32;

bool bitmap[BITMAP_HEIGHT][BITMAP_WIDTH];

При обращении к элементам массива "bitmap" необходимо указывать

два индекса. Например, чтобы изменить значение 2-го пиксела слева в 4-й

строке надо записать оператор:

bitmap[3][1] = true;

Все сказанное во 2-м параграфе относительно одномерных массивов

как параметров функций верно и для двумерных массивов, но у них есть

еще одна особенность. В прототипах и заголовках функций можно опускать

первую размерность многомерного массива-параметра (т.е. записывать

пустые квадратные скобки "[]"), но все остальные размерности надо

обязательно указывать. Далее в качестве примера приведена функция,

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

void clear_bitmap( bool bitmap[][BITMAP_WIDTH],

int bitmap_height )

{

for ( int row = 0; row < bitmap_height; row++ )

for ( int column = 0; column < BITMAP_WIDTH; column++ )

bitmap[row][column] = false;

}