Лекции по проге / 6_Комбинирование операторов
.pdf
Задача
Упорядочить одномерный целочисленный массив 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
