Бинарный поиск здесь не будет работать из-за дубликатов.
Предположим, ваш массив [1,1,1,1,1,0,1,1]
. Тогда arr[lo] = arr[hi] = arr[mid] = 1
: в какую половину вы погружаетесь? Вы можете сказать "правильный!"конечно, но почему? Вся информация, имеющаяся у вас только с этими тремя пунктами, недостаточна, чтобы иметь уверенность в вашем выборе. На самом деле массив может быть [1,0,1,1,1,1,1,1]
, и все же arr[lo] = arr[hi] = arr[mid] = 1
, но сейчас пивот находится не в правой половине. .
Если бы вы могли иметь более строгий порядок в массиве, что означает отсутствие дубликатов (или не более k дубликатов), тогда был бы полезен двоичный поиск.