Я работаю над быстрой сортировкой из моей структуры данных и алгоритмов. В книге он перечисляет метод quicksort, а затем раздел hoare, который он хочет использовать для быстрой сортировки. Кажется, у меня проблема, когда мой раздел hoare использует номера границ в массиве. Либо он использует 8, либо я пытаюсь исправить то, что он идет до -1. Я правильно переписываю книги в java?Работа с quicksort
Quicksort псевдокод
QuickSort(A, p, r)
if p<r
q = partition(A, p, r);
QuickSort(A, p, q - 1);
QuickSort(A, q, r);
Хора-Partition псевдокоде
Hoare-Partition(A,p,r)
x= A[p]
i = p-1
j=r+1
while true
repeat
j=j-1
until A [j] <= x
repeat
i = i +1
until A[i] >= x
if i < l
exchange A[i] with A[j]
else return j
Мой код
public class RunSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] sortNumbers = {4,5,6,2,3,7,2,1};
int[] sorted = new int[sortNumbers.length];
sorted = QuickSort(sortNumbers, 1, sortNumbers.length);
System.out.print(sorted);
}
public static int[] QuickSort(int[] A, int p, int r){
if(p < r){
int q = partition(A, p, r);
QuickSort(A, p, q - 1);
QuickSort(A, q, r);
}
return A;
}
public static int partition(int[] A, int p, int r){
int x = A[p];
int i = p - 1;
int j = r + 1;
int temp;
while(true){
while(A[j] <= x && j != 0){
j--;
}
while(A[i] >= x && i != A.length){
i++;
}
if(i < j){
temp = A[i];
A[i] = A[j];
A[j] = temp;
}else{
return j;
}
}
}
}
О, я вижу, куда я пошел неправильно. Я тестирую его, пока это не состояние. – shinjuo
Правильно ли это было бы изменено while (A [j]> x) { \t \t \t \t j--; \t \t \t} \t \t \t в то время как (А [я] <х) { \t \t \t \t я ++; \t \t \t} – shinjuo
Я думаю, что 'do {...} while (! Condition)' будет ближе к тому, что вы хотите. 'while (condition) {...}' оценивает условие * перед * выполнением блока, что на самом деле не совпадает с тем, что описывает псевдокод 'repeat'. –