1. 5. Сортировка Шелла
В методе Шелла сравниваются не соседние элементы, а элементы, расположенные на расстоянии ( ) (где — шаг между сравниваемыми элементами, [ ] — целая часть от числа). После каждого просмотра шаг уменьшается вдвое. На последнем просмотре он сокращается до .
Например, пусть дан список, в котором число элементов четно:
{40, 11, 83, 57, 32, 21, 75, 64}.
Список длины п разбивается на п/2 частей, т. е. .
При первом просмотре сравниваются элементы, отстоящие друг от друга на (рис. 7), т. е. и т. д. Если , то происходит обмен между позициями i и i+d. Перед вторым просмотром выбирается шаг (рис. 8). Затем выбираем шаг (рис. 9), т. е. имеем аналогию с методом стандартного обмена.
Сложность метода Шелла — .
Исходный массив |
40 |
11 |
83 |
57 |
32 |
21 |
75 |
64 |
|
32 |
|
|
|
40 |
|
|
|
|
|
11 |
|
|
|
21 |
|
|
|
|
|
75 |
|
|
|
83 |
|
|
|
|
|
57 |
|
|
|
64 |
Полученный массив |
32 |
11 |
75 |
57 |
40 |
21 |
83 |
64 |
Рис. 7. Метод Шелла (шаг ( )
Исходный массив |
32 |
11 |
75 |
57 |
40 |
21 |
83 |
64 |
|
32 |
|
75 |
|
|
|
|
|
|
11 |
|
57 |
|
|
|
|
|
|
|
40 |
|
75 |
|
|
|
|
|
|
|
21 |
|
57 |
|
|
|
|
|
|
|
75 |
|
83 |
|
|
|
|
|
|
|
57 |
|
64 |
|
Полученный массив |
32 |
11 |
40 |
21 |
75 |
57 |
83 |
64 |
Рис. 8. Метод Шелла (шаг ( )
Исходный массив |
32 |
11 |
40 |
21 |
75 |
57 |
83 |
64 |
|
11 |
32 |
|
|
|
|
|
|
|
32 |
40 |
|
|
|
|
|
|
|
|
21 |
40 |
|
|
|
|
|
|
|
|
40 |
75 |
|
|
|
|
|
|
|
|
57 |
75 |
|
|
|
|
|
|
|
|
75 |
83 |
|
|
|
|
|
|
|
|
64 |
83 |
|
Полученный массив |
11 |
32 |
21 |
40 |
57 |
75 |
64 |
83 |
Рис. 9. Метод Шелла (шаг ( )