Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 6_Комбинирование операторов

.pdf
Скачиваний:
30
Добавлен:
14.03.2016
Размер:
387.56 Кб
Скачать

Задача

Упорядочить одномерный целочисленный массив vector[] длиной N по возрастанию

Идея метода: Записать в первый элемент массива наименьшее значение. Во второй элемент записать наименьшее значение из оставшихся и т. д.

В этой сортировке по возрастанию элементы с меньшим значением перемещаются в начало массива, оставляя большие числа в конце.

51

Задание

Представьте алгоритм сортировки в виде цикла

52

Упорядочивание одномерного массива по возрастанию

0

1

2

3

 

 

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

 

 

 

 

 

 

 

 

 

3

 

5

 

2

 

3

 

N = 4

 

 

 

 

 

 

 

 

 

 

Шаг 1. На место vector[0] поместить минимальный элемент среди vector[0...3]

0 1 2 3 vector 2 5 3 3

Шаг 2. На место vector[1] поместить минимальный элемент среди vector[1...3]

0 1 2 3 vector 2 3 5 3

Шаг 3. На место vector[2] поместить минимальный элемент среди vector[2...3]

53

0

1

2

3

 

 

 

 

 

 

 

 

vector

2

 

3

3

5

 

 

 

 

 

 

 

 

 

Декомпозиция верхнего уровня

const int N = 4;

int vector[N] = {3, 5, 2, 3};

/* Упорядочить массив по возрастанию */

for(int i = 0; i <= N-2; i++)

{

/* На место vector[i] поместить минимальный элемент среди vector[i...(N-1)] */

54

}

Задание

Декомпозируйте действие

«На место vector[i] поместить минимальный элемент среди vector[i...(N-1)]», представив его последовательностью более простых действий

55

На место vector[i] поместить минимальный элемент среди vector[i...(N-1)]

0

1

2

3

 

 

 

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

 

 

 

 

 

 

 

 

 

 

2

 

5

 

3

 

3

 

i = 1

N = 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 1. Найти среди элементов vector[i...(N-1)] минимальный элемент (его индекс)

i_min = 2

Шаг 2. Поменять местами элементы с индексами i и i_min

0 1 2 3 vector 2 3 5 3

56

Декомпозиция внутреннего шага

57

Декомпозиция внутреннего шага

/* На место vector[i] поместить минимальный элемент среди vector[i...(N-1)] ... */

/* ...Найти среди элементов vector[i...(N-1)] минимальный элемент (его индекс) */

/* ...Поменять местами элементы с индексами i и i_min */

58

Задание

Представьте действие

«Найти среди элементов vector[i...(N-1)]

минимальный элемент (его индекс)», в виде цикла

59

Поиск в массиве минимального элемента (его индекса), начиная с i-го элемента

Необходимо использовать понятие «временно минимальный» элемент — наименьший из уже просмотренных — элемент с индексом i_min

Изначально считаем, что первый элемент массива

самый маленький, т. е. i_min = i

Проходя массив слева направо сравниваем «временно минимальный» элемент с очередным (j- ым): если очередной элемент меньше, то заменяем

«временно минимальный» на очередной (i_min = j)

60