
- •Код процедуры быстрой сортировки
- •Способ выбора опорного элемента
- •Эффективность алгоритма
- •Задача сортировки данных. Определения:
- •Примеры:
- •Задача сортировки данных. Определения:
- •Примеры:
- •Задача сортировки данных. Определения:
- •Примеры:
- •Алгоритм сортировки обменом.
- •Код процедуры сортировки по методу Шелла
- •Задача сортировки данных. Определения:
- •Примеры:
- •Идея метода
- •Рекурсивный характер алгоритма
- •Алгоритм:
- •Пирамидальная сортировка:
- •Две формы хеширования
- •Выбор хеш-функции
- •Выбор хеш-функции в методе деления
- •Выбор хеш-функции в методе умножения
Пирамидальная сортировка:
Суть этого метода сортировки заключается в использовании специального порядка размещения значений в элементах массива, называемого пирамидальным или просто пирамидой
Значения, хранящиеся в массиве A длины n образуют пирамиду, если для любого элемента A[i], i <= n / 2 – 1 выполняются условия:
A[i]>= A[2*i+1], A[i]>= A[2*i+2].
При этом порядок размещения значений в элементах с i > n / 2 – 1 может быть произвольным.
После того как пирамида сформирована начинается собственно процесс сортировки массива
Массив считается состоящим из двух частей – пирамидальной и отсортированной
Первоначально пирамидальная часть занимает весь массив, а отсортированная часть пуста.
Сортировка заключается в повторном выполнении следующей цепочки действий:
поменять местами первое и последнее значения в пирамидальной части (условия пирамидальности будут нарушены);
уменьшить длину пирамидальной части на единицу;
«протолкнуть» значение с вершины пирамиды (из элемента A[0]) на нужное место, восстановив условие пирамидальности
Пирамидальную сортировку можно рассматривать как усовершенствование сортировки методом выбора, поскольку формирование пирамиды завершается выталкиванием на ее вершину максимального (или минимального) элемента из не отсортированной части
Код процедуры:
void HeapSort (int a[], int n)
{
int x;
// построение пирамиды
for (int k = n>>1; k>=0; k--)
Shift(a, k, n);
// сортировка пирамиды
for (int k = n-1; k>0; k--) {
x = a[k];
a[k] = a[0];
a[0] = x;
Shift(a, 0, k-1);
}
}
13.Задача поиска в массивах данных. Алгоритмы линейного и бинарного поиска в одномерном массиве.
Постановка задачи поиска
Имеется множество элементов, характеризующихся некоторым набором параметров
Требуется определить, имеется ли среди них элемент с заданными значениями одного или нескольких параметров
Параметры, значения которых проверяются в процессе поиска, называются ключевыми или просто ключами поиска.
В простейшем случае задается один ключевой параметр – ключ поиска.
Алгоритмы поиска
Алгоритмы поиска определяются структурой данных, используемой для хранения элементов множества:
массивы,
файлы,
списки,
деревья,
графы
Линейный поиск
int LineSearch(int a,int x)/*простой перебор элементов в массиве*/
{
int i;
i=N;
while((i>1)&&(a[i]!=x))
{--i;}
if (a[i]=x)
{return i;}
else
{return 0;}
}
Линейный поиск с барьером
int LineSearch(int a,int x)/*простой перебор элементов в массиве
с барьером int Mas[N]*/
{
int i;
i=N;
a[0]=x;
while(a[i]!=x){--i;}
return i;
}
Алгоритм бинарного поиска в одномерном массиве.
Алгоритм:
Область поиска ограничивается двумя граничными значениями индекса – L (Left) и R (Right).
Середина области поиска задается индексной переменной k=(L+R) / 2
Выбор подобласти для дальнейшего поиска производится путем сравнения искомого значения ключа X со значением ключа в k-м элементе массива
Сужение области поиска осуществляется перемещением одной из границ
Код (Дэлфи/Паскаль):
L=1; R=n; k=(L+R)/2; while ((a[k]!=X)&&(L<=R)) { {(X a[1]..a[n] t a[L]..a[R]) (a[L]..a[R]) (a[1]..a[n])}
if (a[k]<=X) L=k+1; else R=k-1; k=(L+R)/2; }
14.Хеш-поиск в одномерных массивах. Хеш-таблицы и хеш-функции. Способы построения хеш-функций.
Хэш-поиск
Основная идея заключается в том, что потенциальное множество (возможно, бесконечное) элементов X разбивается на конечное число классов. Такое разбиение осуществляется с помощью целочисленной функции h, которая для любого x Î X принимает значения из конечного интервала 0,1,…,B-1. Элемент x называют ключом, h – хеш-функцией или функцией преобразования.
Равенство значений хеш-функции для двух различных ключей называется коллизией.
h(x1)=h(x2)
Коллизия означает, что оба ключа принадлежат одному и тому же классу. Применительно к задаче поиска коллизии связаны с продолжением поиска в пределах данного класса. Такой продолженный поиск называется разрешением коллизии.