Теория: Общая информация изложена здесь
Практика: informatics.mccme.ru
Визуализатор: rain.ifmo.ru [Java]
Реализация:
Данная сортировка является модификацией сортировки вставками.
На начальных этапах происходит сортировка вставками элементов, которые имеют индексы: base, base + d, base + 2*d,… base + n*d, где base – индекс первого элемента в рассматриваемой подпоследовательности массива, d – фиксированный шаг, n – некоторое натуральное число, такое что индекс base + n*d не выходит за границы массива. Постепенно уменьшаем d, до тех пор пока оно не станет равным 1. И на последней итерации происходит сортировка вставками всего массива.
- void shell_sort(vector<int> &mas)
- {
- int d[] = {1750,701,301,132,57,23,10,4,1,0};
- int posD = 0;
- while (d[posD]!=0)
- {
- int curD = d[posD];
- for (int i=curD;i<mas.size();i++)
- {
- int value = mas[i];
- int j = i - curD;
- for (;j>=0;j-=curD)
- {
- if (mas[j]<=value)
- break;
- mas[j+curD] = mas[j];
- }
- mas[j+curD] = value;
- }
- posD++;
- }
- }
* This source code was highlighted with Source Code Highlighter.
Как показывает практика массив из 1e5 элементов сортировка Шелла сортирует не хуже пирамидальной сортировки. Но в общем случае давайте будем считать, что сортировка Шелла имеет для нас только академический интерес
Комментариев нет:
Отправить комментарий