Если вы посмотрите на свой массив и пронумеруете местоположения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
30 20 29 19 28 18 27 17 26 16 25 15 24 14 23 13 22 12 21 11
При сортировке оболочки вы начинаете с номера пропуска (в вашем случае 3), чтобы составить первый «список» Вы берете номер и пропускаете. С 3 это будет 1-й, 4-й, 7-й и т. Д. c.
. Таким образом, у вас будет список
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
30 19 27 16 24 13 21
и второй список
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
20 28 17 25 14 22 11
3-й список - это оставшиеся предметы.
Для следующего раунда вы делаете это на один меньше ... так что предметы в нечетных местах и предметы в четных местах.
В ответ на комментарий ниже
Сортировка оболочки - это сортировка на месте - это означает, что вы не удаляете элементы в новые списки или не создаете новые структуры данных. Вы используете массив, чтобы «обрабатывать» элементы, которые «далеко друг от друга» с точки зрения расположения массивов, как рядом друг с другом. На самом деле вы не создаете новые списки или новые массивы (именно поэтому я показывал свои диаграммы так же, как и я); Вы просто смотрите на эти места.
Почему?
Потому что это означает, что когда вы начинаете (например, с 3), вы перемещаете вещи дальше) - например, 13, который начинается в местоположении 16 перемещается в местоположение 1 в первом проходе. Затем, когда вы уменьшаете число, вы начинаете делать больше локальных изменений. Это означает, что вы получаете преимущество над типичной пузырьковой сортировкой. Все еще не хорошо - но НАМНОГО лучше чем пузырьковая сортировка.