Я наблюдал эту фантастическую визуализацию алгоритма быстрой сортировки: http://www.youtube.com/watch?v=Z5nSXTnD1I4Quicksort Алгоритм не назначая поворот правильно
Я чувствовал, что я действительно понял, принципы, лежащие в быстрой сортировке и с помощью некоторых руководств в Интернете, установить о создании моих быстрая сортировка.
Это то, что я придумал:
public void quickSort(int[] a, int left, int right) {
int index = partition(a, left, right);
if (left < index - 1)
quickSort(a, left, index);
if (index < right)
quickSort(a, index + 1, right);
}
private int partition (int[] a, int left, int right) {
int i = left - 1;
int j = right + 1;
int pivot = a[0];
while (i < j) {
i++;
while (a[i] < pivot)
i++;
j--;
while (a[j] > pivot)
j--;
if (i < j)
swap (a, i, j);
}
return i;
}
private void swap (int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
Значения слева и справа, являются следующие:
left = 0
right = array size - 1
К сожалению, выход не является правильным. Проблема, похоже, заключается в моем лечении стержня. В визуализации, которую я наблюдал, инструктор физически удалил стержень и оставил указатель, указывающий ни на что. Он продолжил учебное пособие, и когда он дошел до точки, где i и j (то, что я называю левым и правым), оба указывали на то же пустое место, он вставил стержень и продолжил движение.
Поскольку я физически держу опорный стержень на месте, мне трудно правильно его сортировать.
В этом коде, я работаю с входом:
4 8 1 6 3 7 2 5
Я получаю результат:
1 3 2 6 8 7 4 5
После «4» значения (т.е. шарнирного) сортируются по крайней начало алгоритма, я никогда не прибегаю к этому, что отбрасывает все. Кроме того, я думаю, что что-то не так с методом quickSort.
Может ли кто-нибудь дать мне несколько указателей? Благодарю.
Редактировать: Два исправления, которые были здесь, были удалены, поскольку они содержали ненужную и неправильную информацию. Один из них изменил опорную точку на: (слева + справа)/2. Это было, конечно, неправильно по причинам, объясняемым в ответах ниже.
Закрытие как слишком локализованное. – djechlin
@djechlin: Я думал, что он нацелен на определенный алгоритм программирования, согласно FAQ. Если я ошибаюсь, не могли бы вы посоветовать, какой Stack Exchange попросить об этом? –
@djechlin он задает проблему кодирования, показывающую код. Как это может быть слишком локализованным? –