2015-04-27 3 views
0

Так что у меня этот массив {3,1,4,1,5,9,2,6,5,3,5}Quicksorting практика целочисленного массива

Я использую медианы из-три способа, чтобы получить шарниры.

В этом случае медиана здесь находится между левым, средним, правым: 3,9,5. Так что это 5

Первое, что я делаю, это убедиться, что стержень находится слева. Теперь я сохраняю числа меньше 5 в левой части и перемещаю числа, большие в правую часть массива. Конечный результат: {3,1,4,1,2,3|5|5,9,6,5}

Теперь quicksort левый и правый подмассивы.

{3,1,4,1,2,3} имеет средний 3 и после перегруппировки я {1,1,2,3,4}

{5,9,6,5} имеет средний 5 и я получаю {5,5,9,6} в результате сортировки равноправные и большее число справа. Но этот подвариант не похож на первый подмассива. Это будет работать только в том случае, если медиана равна 6. Итак, где же это случилось? Благодарю.

+2

Вы выполняетесь только в том случае, если размер подмассива равен 1. Вы можете не останавливаться после произвольного количества итераций. –

+0

Итак, вы говорите, что вам нужно продолжать переупорядочивать числа с меньшим значением в левом и большем значениях справа, пока размеры подмашины не станут равны 1 каждый? – btrballin

+2

Да, вам нужно сортировать подмассивы рекурсивно. –

ответ

1

Необходимо сортировать правый подмашину {|5|5,9,6} (или {5|5|,9,6}) еще раз. Медиана равна 6, и результат будет {5,6,9} (или {6,9}).

Также обратите внимание, что наивный Quicksort со многими дублирующими ключами может деградировать до квадратичной временной сложности. Существуют способы обнаружения ключей, равных оси, и исключения их из подмассивов, которые отсортированы рекурсивно.

Смежные вопросы