Экзаменационный билет №19

1.Упорядоченные таблицы. Алгоритм быстрой сортировки.

Сортированные (упорядоченные) таблицы - таблицы, в которых записи располагаются в порядке возрастания (или убывания) ключей

Упорядоченность таблиц может быть организована только при возможности сравнения ключей (на множестве ключей задано отношение линейного порядка).

Сортировка - действия, связанные с размещением записей в порядке возрастания (или убывания) ключей

Алгоритм сортировки называют устойчивым, если он никогда не меняет относительный порядок в таблице двух записей с равными ключами

Внутренняя сортировка - Упорядочивание данных, при котором все значения располагаются в ОП

Сортировка включением

Идея похода – вставка нового значения в упорядоченный набор данных.

Алгоритм быстрой сортировки.

Идея подхода (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; // индекс ведущего элемента

При наличии процедуры разделения алгоритм сортировки может быть определен рекурсивно – необходимо разбить упорядочиваемый набор на два блока с меньшими и большими значениями соответственно и затем последовательно отсортировать полученные блоки.

Оценка сложности:

Вероятность выбора любого ключа в качестве ведущего элемента является одинаковой:

Докажем по индукции, что

Оценка сложности:

2. Реализация структуры хранения нескольких стеков с использованием списков на языке высокого уровня

Звено списка представляются в виде объекта класса TLink

class TLink {
  public:
    int Value; 
    int Next;
  protected:
    TLink();
};

Образ памяти, выделенной для хранения стека, определяется в виде массива звеньев-объектов

TLink Mem[MemLimit];

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

Структура хранения стека - линейный список (начало списка - вершина стека)

Схемы работы со стеком и со списком свободных звеньев совпадают. Список свободных звеньев есть стек.