Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инфа экзамен / семинарские вопросы.docx
Скачиваний:
157
Добавлен:
23.03.2016
Размер:
100.27 Кб
Скачать

12)Метод сортировки массива вставками.

На каждом следующем i-том шаге, i=1,2, 3,…,n-2, значение из (i+1)-ой ячейки массива путем обмена положением с числом из предыдущей ячейки продвигают в сторону уменьшения индекса ячейки до тех пор, пока не окажется, что в предыдущей ячейке находится не большее число. Из сказанного следует, что при реализации метода прямого включения(вставками) внешний цикл должен выполняться n-1 раз, а максимально возможное число выполнений внутреннего цикла, в теле которого должны выполняться сравнения и перестановки чисел, будет увеличиваться от 1 до n-1.

Исходный код функции:

void InsertionSort(int *input_data, int length) {

int i, j, temp;

for (i = 1; i < length; i++)

{

temp = input_data[i]; // Запоминаем элемент, с которым будем сравнивать элемент из последующего цикла

for (j = i - 1; j >= 0; j--)

{

if (input_data[j] < temp)

break;

// Меняем элементы местами.

input_data[j + 1] = input_data[j];

input_data[j] = temp;

}

}

}

13) Метод прямого обмена (метод пузырька) и его модификация.

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

void BubbleSort(int *input_data, int length) {

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

for (int j= length - 1; j >=i; j--) {

if ( input_data[j-1] > input_data[j]) { //Элементы неупорядочены.

// Меняем элементы местами.

int temp = input_data[j-1];

input_data[j-1] = input_data[j];

input_data[j] = temp;

}

}

}

Модифицированный метод пузырька.

При использовании метода пузырька массив может оказаться упорядоченным уже после i-го шага (i<n-1),то есть возможно выполнение внешнего цикла не n-1 раз, а меньше, когда станет известно, что массив уже упорядочен. Такая проверка основывается на следующем: если при выполнении внутреннего цикла не было ни одной перестановки, значит массив уже упорядочен и можно выйти из внешнего цикла. В качестве признака, выполнялась ли перестановка, используют переменную булевского типа: до входа во внутренний цикл ей дают одно значение, например, false, а при выполнении перестановки – другое, например, true. Очевидно, эффект при использовании модифицированного метода пузырька по сравнению с не модифицированным методом в ускорении процесса сортировки будет наблюдаться, если исходная последовательность чисел близка к упорядоченности в нужном направлении. В предельном случае, когда массив уже упорядочен нужным образом, тело внешнего цикла будет выполнено только один раз.

i=1;

Исходный код функции:

do {

flag=0;

for (j=0; j<n-I; j++)

if (x[j]>x[j+1])

{

d=x[j];

x[j]=x[j+1];

x[j+1]=d;

flag=1;

}

i++;

}

while(flag);

Соседние файлы в папке инфа экзамен