Сортированные (упорядоченные) таблицы - таблицы, в которых записи располагаются в порядке возрастания (или убывания) ключей
Упорядоченность таблиц может быть организована только при возможности сравнения ключей (на множестве ключей задано отношение линейного порядка).
Сортировка - действия, связанные с размещением записей в порядке возрастания (или убывания) ключей
Алгоритм сортировки называют устойчивым, если он никогда не меняет относительный порядок в таблице двух записей с равными ключами
Внутренняя сортировка - Упорядочивание данных, при котором все значения располагаются в ОП
Сортировка включением
Идея похода – вставка нового значения в упорядоченный набор данных.
Алгоритм быстрой сортировки.
Идея подхода (Hoare C.A.R.)– использование процедуры разделения упорядочиваемого набора на две части, в одной из которых располагаются значения, меньшие некоторого порогового (ведущего) элемента массива, в другой – соответственно большие значения. Подобный способ разделения может быть выполнен без привлечения дополнительной памяти.
// Разделение массива с использованием ведущего элемента
key = k[0]; // ведущий элемент
i1 = i2 = N - 1; // индексы левого (i1) и правого (i2) блоков
// цикл, пока разделяемые блоки не пересекутся
while (i1 <= i2) {
// пока k[i1] не превышает ведущего элемента, переход вправо
while ((i1 < N) && (k[i1] <= key))
i1++;
// пока k[i2] меньше ведущего элемента, переход влево
while (k[i2] > key)
i2--;
//перестановка значений, которые приостановили разделение массива
if (i1 < i2) {
kt = k[i1];
k[i1] = k[i2];
k[i2] = kt;
}
}
// установка ведущего элемента между блоками
k[0] = k[i2];
k[i2] = key;
i1 = i2; // индекс ведущего элемента
При наличии процедуры разделения алгоритм сортировки может быть определен рекурсивно – необходимо разбить упорядочиваемый набор на два блока с меньшими и большими значениями соответственно и затем последовательно отсортировать полученные блоки.
Оценка сложности:
Вероятность выбора любого ключа в качестве ведущего элемента является одинаковой:
Докажем по индукции, что
Оценка сложности:
Звено списка представляются в виде объекта класса TLink
class TLink {
public:
int Value;
int Next;
protected:
TLink();
};
Образ памяти, выделенной для хранения стека, определяется в виде массива звеньев-объектов
TLink Mem[MemLimit];
Все свободные звенья объединяются в один список свободных звеньев. Звенья этого списка используются при необходимости свободной памяти, в этот список звенья должны возвращаться после освобождения.
Структура хранения стека - линейный список (начало списка - вершина стека)
Схемы работы со стеком и со списком свободных звеньев совпадают. Список свободных звеньев есть стек.