Прямые из Википедии:
Если стоимость сравнений превышает стоимость свопов, как это имеет место , например, с строковыми ключами, хранящихся в виде ссылки, или с человеческим взаимодействия (например, выбирая один из А пара, отображаемая бок о бок), , тогда использование двоичной сортировки вставки может повысить производительность. Двоичный вставки использует своего рода двоичный поиск, чтобы определить правильное расположение для вставки новых элементов, и, следовательно, выполняет ⌈log2 (п) ⌉ сравнений в худшем случае, который является О (п п) войти. Алгоритм как целое все еще имеет время работы O (n2) в среднем из-за серии сводок , необходимых для каждой вставки.
Источник:
http://en.wikipedia.org/wiki/Insertion_sort#Variants
Вот пример:
http://jeffreystedfast.blogspot.com/2007/02/binary-insertion-sort.html
Я уверен, что это уменьшит количество сравнений, но я m не совсем уверен, почему.
Ну, если вы знаете сортировку вставки и бинарный поиск уже, то ее довольно прямолинейно. Когда вы вставляете кусок в сортировке вставки, вы должны сравнивать все предыдущие части. Скажите, что вы хотите переместить этот [2] в нужное место, вам придется сравнить с 7 частями, прежде чем вы найдете нужное место.
[1] [3] [3] [3] [4] [4] [5] ->[2] < - [11] [0] [50] [47]
Однако, если вы начнете сравнение на половине пути (например, двоичный поиск), вы сравните только 4 штуки! Вы можете сделать это, потому что знаете, что левые части уже в порядке (вы можете делать только двоичный поиск, если штуки в порядке!).
Теперь представьте, если бы у вас было тысячи штук (или даже миллионов), это сэкономит вам много времени. Надеюсь, это поможет. | = ^)
Бинарный поиск позиции занимает O (log N). Это делает сравнения O (N.log (N)) для сортировки отверстий. [Мы можем пренебречь тем, что N растет от 1 до конечного N, пока мы вставляем] – MrSmith42
Алгоритм по-прежнему равен O (n^2) из-за вставок. Таким образом, в то время как двоичный поиск может сократить время синхронизации (поскольку сравнение меньше), оно не уменьшает асимптотическое время работы. –
@Derrek Whistle: ответ обновлен –