- •Алгоритмизация и основы программирования
- •Оглавление
- •Библиографический список
- •Операции языка Си
- •Характеристики операций
- •Комментарии к операциям
- •Правила преобразований типов
- •В выражениях
- •В присваиваниях
- •Операторы языка Си
- •Оператор выражение
- •Пустой оператор
- •Составной оператор
- •Оператор if
- •Оператор switch
- •Оператор break
- •Оператор for
- •Оператор while
- •Оператор do while
- •Оператор continue
- •Оператор return
- •Оператор goto
- •Алгоритм сортировки обменами (алгоритм "пузырька")
- •Алгоритм сортировки вставками
- •Алгоритм сортировки выбором элемента
- •Контрольные вопросы
Алгоритм сортировки выбором элемента
Сортировка выбором элемента - это наиболее привычный и в то же время не самый худший способ решения задачи. В массиве нужно найти элемент с минимальным значением и поменять его местами с первым элементом массива (для сортировки по убыванию - это нужно сделать с максимальным элементом!). После этого элемент с минимальным значением отыскивается среди всех элементов, кроме первого, и меняется значениями со вторым элементом массива и т.д. В результате все элементы выстраиваются по порядку.
Данный алгоритм имеет общую опенку трудоемкости на уровне 0(n2). По сравнению с алгоритмами вставки и "пузырька" он обеспечивает существенно меньшее количество перемещений элементов (обменов) и в большинстве случаев может оказаться более быстрым, чем они. Для учащихся, испытывающих затруднения с программированием более сложных и громоздких алгоритмов, метод можно рекомендовать в качестве учебного.
// Метод сортировки выбором элемента
void vwibor(int a[], int n)
{
for( int i = 0; i<n-1; i++)
{
int r =i;
for( int j = i+1; j<n; j++)
if( a[r] > a[j])
r =j;
swap( &a[r], &a[i]);
}
}
Контрольные вопросы
Чем отличается операция от оператора?
Объясните основные свойства операции: арность, ассоциативность, приоритет.
В чем состоит оптимизация компилятора при вычислении логических выражений?
Объясните разницу между автоматическим и отложенным инкрементированием.
Чему равно (2 + 7/3)%3
Чему равно ~x | x для целого типа x
Вычислите 10 & 15 | 20.
Замените оператор условия
if(x<5)
y=z;
else
e=-z;
одним выражением.
Вычислите 25>>2<<3
Найдите максимальное число из трех чисел с помощью одного выражения.
В переменной char c сбросьте флаги, то есть замените 1 на 0, если они есть, во втором и пятом битах.
Преобразуйте цикл for в while
for(int i=-2; i<5; i++)
Преобразуйте цикл while в for
float q=4.5;
while(q--)
printf(“%f”, q);
С помощью перестройки улучшите структуру следующего фрагмента программы done = i = 0;
while ( i < MAXI && !done){
if(( x/2 ) > 1 ) { i++; continue;}
done++;}
Запишите без оператора goto следующий фрагмент m: if(A)
{
B;
goto m;
}
Перепишите операторы условного перехода так, чтобы их условия не содержали логических операций.
if(A && B || !C)
D;
else if(B || C)
E;
Else F;
Вычислить факториал n! тремя способами с помощью трех видов цикла.
Запишите двойной цикл
for (int i = 0; i<5; i++)
{
printf(“\n”);
for (int j = 0; j<4; j++)
printf(“%3d”, i*j);
}
с помощью одинарного цикла с теми же счетчиками i, j..
Замените оператор
if(A)
B;
эквивалентным оператором цикла for
