Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 04 - Операции и операторы.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
347.14 Кб
Скачать
    1. Оператор goto

Использование оператора безусловного перехода goto в практике программирования на языке СИ настоятельно не рекомендуется, так как он затрудняет понимание программ и возможность их модификаций.

Формат этого оператора следующий:

goto имя-метки;

...

имя-метки: оператор;

Оператор goto передает управление на оператор, помеченный меткой имя-метки. Помеченный оператор должен находиться в той же функции, что и оператор goto, а используемая метка должна быть уникальной, т.е. одно имя-метки не может быть использовано для разных операторов программы. Имя-метки - это идентификатор.

Любой оператор в составном операторе может иметь свою метку. Используя, оператор goto, можно передавать управление внутрь составного оператора. Но нужно быть осторожным при входе в составной оператор, содержащий объявления переменных с инициализацией, так как объявления располагаются перед выполняемыми операторами и значения объявленных переменных при таком переходе будут не определены.

За исключением особо оговариваемых случаев, операторы выполняются последовательно.

    1. Алгоритм сортировки обменами (алгоритм "пузырька")

Метод "пузырька" является, пожалуй, самым простым из всех известных методов внутренней сортировки. Суть этого алгоритма состоит в последовательном просмотре массива от конца к началу или от начала к концу и сравнении каждой пары элементов между собой. При этом "неправильное" расположение элементов устраняется путем их перестановки (обмена значениями). Процесс просмотра и сравнения элементов повторяется до получения результата. При сортировке по неубыванию "легкие" элементы с меньшим значением как бы "всплывают" к началу массива подобно тому, как это делают пузырьки воздуха в стакане с водой - отсюда и происходит популярное название алгоритма. "Пузырьковая" сортировка имеет очень плохие временные характеристики - ее трудоемкость выражается величиной вида O(n2), где n - размер массива. В связи с этим она имеет только учебно-исторический интерес и не может быть рекомендована для практического использования. Сортировка осуществляется по неубыванию (возрастанию).

Поскольку очень многие алгоритмы сортировки используют стандартный процесс обмена значениями между элементами, то эта операция выделена в отдельную процедуру swap с двумя параметрами-переменными.

// Стандартная функция для обмена значениями

void swap( int *a, int *b )

{

int men;

men = *a; *a = *b; *b = men;

}

// Метод сортировки обменами (алгоритм "пузырька")

void puz(int in[], int n)

{

int i,cc,found;

do { // Повторять просмотр…

found = 0;

for (i=0; i<n-1; i++)

if (in[i] > in[i+1])

{ // Сравнить соседей

swap(in+i, in+(i+1));

found++;

}

} while(found !=0);

}

void main()

{

int A[]={1,3,2,4,2}, N;

N = sizeof(A)/sizeof(A[0]);

puz(A,N);

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

printf(“%d ”, A[i]);

}

    1. Алгоритм сортировки вставками

Метод сортировки вставками заключается в переборе всех элементов массива от первого до последнего и вставке каждого очередного элемента на "свое" место среди предшествующих ему элементов, упорядоченных ранее таким же способом. Поскольку процесс начинается с самого первого элемента, то последовательность упорядоченных элементов постепенно растет до тех пор, пока самый последний элемент не встанет на "свое" место. Освобождение места для вставки элемента осуществляется путем соответствующего сдвига группы элементов.

Данный алгоритм также обладает слишком низким быстродействием, чтобы быть рекомендованным к практическому использованию - по оценке трудоемкости он сопоставим с алгоритмом "пузырька" (0(n2)).

// Метод сортировки вставками элемента

void vstavka(int a[], int n)

{

for( int i = 1; i<n; i++)

for( int j = 0; j< i-1; j++)

if( a[j] > a[i])

{

int r=a[i];

for( int k = i; k> j+1; k++)

{

a[k] = a[k-1];

a[k-1] = r;

}

}

}