- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •1. Алфавит языка Си
- •2. Элементы языка
- •3. Типы данных
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
- •Удаление элементов из массива
- •«Школьный» алгоритм сортировки
- •Группировка массива методом прямой выборки
- •Группировка массива методом прямого обмена
- •Вставка элемента в упорядоченный массив
- •1. Ввод элементов матрицы с клавиатуры.
- •2. Вывод матрицы на экран.
«Школьный» алгоритм сортировки
Сортировка массива (ее также называют группировкой) заключается в такой перестановке элементов массива, при которой они будут расположены в заданном порядке – по возрастанию (группировка по возрастанию) или по убыванию (группировка по убыванию). В первом случае между элементами массива имеет место соотношение
;
во втором случае - соотношение
.
В дальнейшем, рассматривая различные методы группировки, речь будет идти о группировке по возрастанию.
На начальном этапе изучения программирования, в частности в школьном курсе информатики программу сортировки одномерного массива обычно представляют в следующем виде:
for(i=0;i<n;i++) //Внешний цикл
for(j=0; j<n;j++) //Внутренний цикл
if(x[i]<x[j])
{ buf=x[i]; x[i]=x[j]; x[j]=buf;}
Это самая простая из возможных программ сортировки, однако одновременно следует отметить, что более худшего метода сортировки еще не придумано.
Недостатки школьного алгоритма сортировки:
1. Дважды проверяется каждая пара элементов (например, при ипроверяются элементыи; прии─ те же элементыи).
2. При производится ненужная проверка одного и того же элемента.
3. Алгоритм совершенно не учитывает исходное расположение элементов массива. Это означает, что время обработки массива, элементы которого уже были расположены по возрастанию, будет примерно таким же, как и в случае, когда элементы массива расположены в обратном порядке, т.е. по убыванию.
Избавиться от первых двух недостатков довольно легко. Для этого алгоритм сортировки запишем в следующем виде:
for(i=0;i<n-1;i++) //Внешний цикл
for(j=i+1; j<n;j++) //Внутренний цикл
if(x[i]>x[j])
{ buf=x[i]; x[i]=x[j]; x[j]=buf;}
Назовем этот вариант модифицированным школьным алгоритмом сортировки. Важно отметить, что в первом варианте осуществляется проверка x[i]<x[j], а во втором - x[i]>x[j].
Как будет в дальнейшем показано в сравнительной таблице методов группировки, в данном случае время обработки массива сокращается примерно в два раза.
Группировка массива методом прямой выборки
В рассмотренном ниже алгоритме последовательно выбирается минимальный элемент в подмассивах; в связи с этим данный метод группировки можно назвать также методом выделения минимального элемента.
Последовательность реализации алгоритма:
1) Просматриваем массив и определяем индекс минимального элемента. Если , то выполняем обмен элементови .
2) Просматриваем подмассив и определяем индекс минимального элемента. Если , то выполняем обмен элементови .
3) То же по отношению к подмассиву и т.д.
Последним подмассивом, подвергающимся просмотру, является подмассив .
for(i=0;i<n-1;i++) //Внешний цикл
{ imin=i; //i-й элемент принимаем за минимальный
for(j=i+1;j<n;j++)//Внутренний цикл поиск минимума if(x[imin]>x[j])
imin=j;
if (imin!=i)
{ //перестановка элементов
buf=x[i];
x[i]=x[imin];
x[imin]=buf;
}
}
Здесь внешний цикл - перебор подмассивов; внутренний - поиск минимального элемента в подмассиве. Количество выполнений внешнего и внутреннего циклов не зависит от исходной упорядоченности массива .
Примечание. Аналогичным образом можно реализовать метод прямой выборки путем выделения максимального элемента в последовательных подмассивах.