Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы Тех.програм.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
291.5 Кб
Скачать
  1. Метод сортировки бинарной вставкой

  1. Бинарные вставки

  2. {сортировка бинарными вставками}

  3. for i:=2 to n do

  4. begin

  5. r:=i;

  6. l:=i;

  7. while (l<r);

  8. begin

  9. k:=(l+r) div 2;

  10. if a[k]>a[i] then l:=k+1;

  11. else r:=k;

  12. end;

  13. k:=r;

  14. x:=a[i];

  15. for m:=i downto k+1 do

  16. a[m]:=a[m-1];

  17. a[k]:=x;

  18. end;

  19. Для ускорения числа сравнений при поиске места, в которое нужно вставить элемент X, можно использовать логарифмический поиск. Это означает, что сначала Х сравнивается с элементом k[j/2], затем, в зависимости от результата сравнения, с элементом, лежащим посередине между 1 и j/2 или посередине между j/2+1 и j и т.д. . При этом число сравнений для каждого j равно примерно log(j). Число пересылок элементов при этом не изменяется и остается примерно равным N/4. Время работы алгоритма t примерно оценивается формулой: t=a*N + b*N + c*N*logN, где a,b,c - неизвестные константы, зависящие от программной реализации алгоритма, log - логарифм по основанию 2.

  1. Метод сортировки стандартным обменом Стандартный обмен

Метод стандартного обмена еще называется "Методом Пузырька". В этом методе d=1, т.е. сравниваются рядом стоящие элементы. При первом проходе алгоритм последовательно сравнивает по два элемента и меняет их местами в зависимости от условия сортировки. При этом на последнем месте оказывается самый максимальный (минимальный) элемент. На втором шаге алгоритм сравнивает первые N-1 элементов в ставит предпоследним самый большой. При каждом последующем шаге интервал уменьшается на единицу.

Давайте рассмотрим пример:

Дано множество

{8,3,4,2,5}

1. {3,8,4,2,5} - сравниваются 8 и 3, переставляются т.к. 8>3

2. {3,4,8,2,5} - сравниваем 8 и 4, также переставляем.

3. {3,4,2,8,5}

4. {3,4,2,5,8}

В результате этого первого шага элемент весом в 8, переместился в конец. Далее он не рассматривается и операция сортировки производится с множеством {3,4,2,5}.

В результате всех шагов у нас образуется отсортированное по возрастанию множество {2,3,4,5,8}.

А теперь программная реализация этого алгоритма.

#include <stdio.h>

#include <stdlib.h>

int BubbleSort(int *array,int len)

{

int i,j,c;

int k=0;

for (i=len;i>1;i--)

{

k=0;

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

if (array[j]<array[j-1])

{

c=array[j];

array[j]=array[j-1];

array[j-1]=c;

k=1;

};

if (k==0) return 0;

};

};

int main()

{

int k[6]={8,-5,1,7,3,-10};

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

printf(" %d ",k[i]);

printf("\n");

BubbleSort(k,5);

for (i=0; i<6;i++)

printf(" %d ",k[i]);

printf("\n");

return 0;

};

Процедура BubbleSort() сортирует len первых элементов в массиве array.

Результат выполнения программы:

8 -5 1 7 3 -10

-5 1 3 7 8 -10

Наверно, Вы заметили, что элемент -10 не отсортировался. Это потому, что в сортировке участвовало 5 элементов.