Существует ли алгоритм локального разделения (из вид, используемый в реализации Quicksort), который не полагается на элемент сводной таблицы, присутствующий в массиве ?
Другими словами, элементы массива нужно расположить в таком порядке:
- Элементы меньше оси поворота (если есть)
- Элементы, равные оси поворота (если есть)
- Элементы больше оси поворота (если есть)
Он по-прежнему должен возвращать индекс (после сортировки) сводного элемента, если он присутствует в массиве, или специальное значение, если нет; Это может быть дополнение индекса, в который можно вставить элемент для сохранения порядок (например, возвращаемое значение стандарта Java функция двоичного поиска.)
Реализации, которые я видел, требуют, чтобы индекс элемента поворота был указан в качестве параметра (или всегда был в начале массива). К сожалению, я не знаю заранее, присутствует ли поворотный элемент в массиве (или где он находится в массиве.)
Изменить (в ответ на комментарии meriton): мы также можем предположить, что выполняется одно из следующих условий:
- Длина массива ‹2, или
- По крайней мере один элемент ‹= pivot и по крайней мере один элемент> = pivot.
В массиве могут быть повторяющиеся значения (включая дубликаты значения сводной таблицы).