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

38.Сортировка выбором.

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

template< class T >

void selectSort(T* arr, int size)

{

T tmp;

for(int i = 0; i < size; ++i) // i - номер текущего шага

{

int pos = i;

tmp = arr[i];

for(int j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента

{

if (arr[j] < tmp) {

pos = j;

tmp = arr[j];

}

}

arr[pos] = arr[i];

arr[i] = tmp; // меняем местами наименьший с a[i]

}

}

43.Алгоритмы и методы поиска в отсортированном массиве данных.

Поиск в отсортированном массиве

Когда необходимо найти произвольный элемент в массиве самое первое что приходит на ум это перебрать все значения массива и сравнить их с искомым. Однако применять этот метод для поиска в отсортированном массиве значит не рационально использовать ресурсы компьютера. Для отсортированных массивов лучше применять двоичный поиск. Его идея заключается в следующем сравнить искомый элемент с элементом в серединой массива, если искомый элемент меньше элемента в середине массива, то подобным же образом исследовать первую половину массива, если больше - то вторую, если равен - то возвращается его индекс. Лучше всего понять всё вышесказанное, взглянув на рисунок. На нём показан процесс нахождения числа 44.

Сам код алгоритма двоичного поиска выглядит так:

Листинг 7. Поиск в отсортированном массиве

function BinarySearch(find: Integer; ar: array of integer; min,

max: integer): Longint;

var

middle: Longint;

searches: Integer;

begin

searches:=0;

while (min<=max) do begin

searches:=searches+1;

middle:=round((min+max)/2);

if find=ar[middle] then begin

Result:=middle+1;

exit;

end

else if find<ar[middle] then

// исследуем левую половину массива

max:=middle-1

else

// исследуем правую половину массива

min:=middle+1;

end;

// искомого элемента не оказалось в списке

Result:=0;

end;