
- •Код процедуры быстрой сортировки
- •Способ выбора опорного элемента
- •Эффективность алгоритма
- •Задача сортировки данных. Определения:
- •Примеры:
- •Задача сортировки данных. Определения:
- •Примеры:
- •Задача сортировки данных. Определения:
- •Примеры:
- •Алгоритм сортировки обменом.
- •Код процедуры сортировки по методу Шелла
- •Задача сортировки данных. Определения:
- •Примеры:
- •Идея метода
- •Рекурсивный характер алгоритма
- •Алгоритм:
- •Пирамидальная сортировка:
- •Две формы хеширования
- •Выбор хеш-функции
- •Выбор хеш-функции в методе деления
- •Выбор хеш-функции в методе умножения
Задача сортировки данных. Определения:
Сортировкой называется упорядочение множества однотипных объектов по тому или иному признаку
Признак, по которому осуществляется упорядочение объектов, называется ключом сортировки
Примеры:
При составлении списка студентов их фамилии располагаются в алфавитном порядке
Мастерская по ремонту бытовой техники выполняет заявки на обслуживание в порядке их поступления – заявки упорядочиваются по времени
Порядок доставки товара торговым предприятием может определяться объемом торговой сделки – заказы будут сортироваться по стоимости
Сортировкой одномерного массива называется упорядочение значений его элементов по возрастанию или убыванию.
Простые алгоритмы сортировки.
Определение:
В эту группу входят три алгоритма, которые реализуют методы сортировки, известные как метод выбора, метод включений и метод обмена (пузырька).
Сравнение методов
Все три алгоритма имеют, в среднем, одинаковую эффективность и выбор одного из них может определяться особенностями задачи, а также личными пристрастиями программиста.
Алгоритм сортировки включениями.
Как и в предыдущем методе, отсортированная часть массива формируется путем последовательного добавления в нее элементов из его неотсортированной части.
Однако теперь в качестве очередного берется первый элемент неотсортированной части.
Место его размещения в отсортированной части выбирается так, чтобы сохранить уже имеющийся там порядок сортировки.
const int N = 10;
void main()
{ int i, j, nMin, A[N], c;
// здесь нужно ввести массив A
for ( i = 1; i < N; i ++ )
{ c = A[i];
j = i -1; // ищем минимальный, начиная с A[i]
while (j > =0 && A[j] > c) A[j+1] = A[j--];
A[j+1] = c;
}
printf("\n Отсортированный массив:\n");
for ( i = 0; i < N; i ++ )
printf("%d ", A[i]);
}
Алгоритм сортировки обменом.
Этот метод сортировки имеет жаргонное наименование «метод пузырька» и заключается в многократном упорядочении пар соседних элементов.
const int N = 10;
void main()
{
int i, j, A[N], c;
// здесь надо ввести массив A
for ( i = 0; i < N-1; i ++ ) // цикл повторных проходов по массиву
for ( j = N-2; j >= i; j -- ) // идем с конца массива в начало
if ( A[j] > A[j+1] ) // если они стоят неправильно, ...
{
c = A[j]; A[j] = A[j+1]; A[j+1] = c; // переставить A[j] и A[j+1]
}
printf("\n Отсортированный массив:\n");
for ( i = 0; i < N; i ++ ) printf("%d ", A[i]);
}
10.Задача сортировки данных. Сортировка одномерных массивов методом Шелла.
Задача сортировки данных.
Определения:
Сортировкой называется упорядочение множества однотипных объектов по тому или иному признаку
Признак, по которому осуществляется упорядочение объектов, называется ключом сортировки
Примеры:
При составлении списка студентов их фамилии располагаются в алфавитном порядке
Мастерская по ремонту бытовой техники выполняет заявки на обслуживание в порядке их поступления – заявки упорядочиваются по времени
Порядок доставки товара торговым предприятием может определяться объемом торговой сделки – заказы будут сортироваться по стоимости
Сортировка методом Шелла.
Этот метод сортировки был предложен в 1959 г. Дональдом Шеллом
Метод Шелла является усовершенствованием простого метода включения.
Идея метода
На каждом этапе процесса сортировки массив разбивается на цепочки равноотстоящих элементов
Расстояние между элементами в цепочке называется ее шагом (шагом сортировки)
Каждая из таких цепочек сортируется методов вставок
При значении шага, равном k, этот процесс называется k-сортировкой массива
Теорема
Имеет место важная теорема, которая служит обоснованием метода Шелла:
- если массив, отсортированный с шагом k, затем сортируется с шагом m<k, то он остается k-отсортированным
Иначе говоря, каждая последующая сортировка сохраняет результат предыдущей и увеличивает степень упорядоченности массива
Последовательность шагов
Анализ метода Шелла показывает, что желательно минимизировать количество кратных значений в последовательности шагов сортировки
В литературе встречаются рекомендации использовать такие последовательности шагов (записанные в обратном порядке):
…121, 40, 13, 4, 1, где ki+1=(ki-1)/3,
…31, 15, 7, 3, 1, где ki+1=(ki-1)/2
Однако на практике используется более простой алгоритм для вычисления шага цепочки, а именно ki= ki-1*3/5, начиная с k1=N div 2 и заканчивая шагом, равным единице