У меня возникли проблемы с пониманием этого partition
способ. Использование случайного стержень, кажется, не работает, это только кажется, работать, если я использую один из них в качестве поворота:Random pivot не работает быстрая сортировка
arr[left]
arr[right - 1]
arr[(left + right)/2]
Однако я думал, что любой элемент должен работать. Когда я меняю его на что-то вроде arr[1]
, код перестает работать ... Я что-то не понимаю о стержне?
Вот код для partition()
метода:
public static int partition(int arr[], int left, int right) {
// Pick a pivot point. Can be any element.
int pivot = arr[(left + right)/2];
while (left <= right) {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left <= right) {
swap(arr, left, right);
left++;
right--;
}
}
return left;
}
А вот ссылка на полный Быстрый код Сортировка: https://gist.github.com/anonymous/e1c74f2794ecb5b898ab
Как примечание стороны, я также немного неуверен почему мы возвращаем left
из метода partition()
.
left (вы можете рассмотреть j, как осталось для вашего случая) возвращается слева от метода partition(), потому что все элементы A [p..j-1] меньше или равны каждому элементу o f A [j..r], когда крайняя замкнутая петля заканчивается. и, пожалуйста, выберите имя переменной мудро. – avinesh