Когда сортировка оболочки делает избыточные сравнения?

#algorithm

#алгоритм

Вопрос:

Мой ответ был:

Сортировка оболочки делает избыточное сравнение, потому что, если во время сравнения для элементов, находящихся далеко друг от друга (когда h находится рядом 8 ), он сравнивает два элемента, которые будут соседними, а затем будет сравнивать один и тот же элемент снова, когда во время сравнения для элемента рядом друг с другом (когда h находится рядом 1 ). Например, если список 113 400 818 612 112 311 412 429 , когда h = 4 , он будет сравнивать 113 и 112 , и когда h = 1 , он будет сравнивать 113 и 112 снова, поскольку он будет сравнивать элементы, которые находятся ближе всего друг к другу.

Правильный ли мой ответ?

Ответ №1:

Ваш пример определенно тот, где происходит избыточность. На самом деле, избыточности нельзя избежать при сортировке оболочки. Как вы заметили, когда h = 1, он всегда сравнивает то, что сравнивалось в предыдущих препроцессах. Одна вещь, которую вы можете сделать, чтобы повысить производительность сортировки оболочки (т. Е. Уменьшить избыточные сравнения), — это разумно выбирать h. Например, если вы выбираете h равным 4, 2, 1, то 113 и 112 должны сравниваться три раза, а если вы выбираете h равным 5, 3, 1, избыточные сравнения значительно сокращаются. Общее правило выбора h — это не выбирать степени 2 и не выбирать кратные друг другу. Надеюсь, это поможет.