无法在我的快速排序实现中调用排序方法



我正在尝试使用java编写快速排序算法。我的问题是,我不能调用sort方法。这是我的代码:

public class quickSort
{
int  partition(int a[], int left, int right)
{
int i= left, j= right, temp;
int pivot=a[j];
//System.out.println(pivot+"pivot");
while(i<=j)
{
while(a[i]<pivot)
i++;
while(a[j-1]>pivot)
j++;
if(i<j)
{
temp=a[i];
a[i]=a[j-1];
a[j-1]=temp;
System.out.println(a[i] +"i");
System.out.println(a[j-1] +"j");
i++;
j--;
}
}
System.out.println(i);
System.out.println(j);
return i;
}
int[] sort(int[] numbers, int left, int right)
{
int x = partition(numbers, left, right);
System.out.println(x +"Qi");
if(left < right)
sort(numbers, left, x-1);
sort(numbers, x+1, right);
return numbers; 
}

public static void main(String[] args)
{
quickSort q= new quickSort();
int[] numbers = {2,6,4,9,7,0,1,3,5}; 
int left = 0, right=numbers.length-1;
q.sort(numbers, left, right);
}
}

问题:

sort(numbers, left, x-1);
sort(numbers, x+1, right); 

此递归未执行

当我尝试在分区方法中编码时,它还会导致越界异常。

这是我使用它的输出的屏幕截图,仅用于显示输出并显示我用于执行的IDE: https://drive.google.com/file/d/1j6lHuEONZkO_Dr3ZszoPKh4bNXZgkgbT/view?usp=sharing。

当前代码在分区方法中生成无限循环或 ArrayIndexOutOfBoundsException,具体取决于您选择的数字数组。可能的解决方法是,例如:

private int partition(int a[], int left, int right) {
int i = left, j = right, temp;
int pivot = a[j];
while (i <= j) {
if (a[i] > pivot) {
temp = a[i];
for (int k = i; k < right; k++) { // remove a[i] and move all elements...
a[k] = a[k + 1];              // ...following a[i] to the left
}
j--;                              // decrement pivot's index
a[right] = temp;                  // move a[i] to the right end
} else {
i++;
}
}
return j;                                 // return pivot's modified index
}

此外,在排序方法中,您必须确保对于两个递归排序调用,左边界小于右边界,例如:

private int[] sort(int[] numbers, int left, int right) {
int x = partition(numbers, left, right);
if (left < right) { // left boundary smaller than right one
sort(numbers, left, x - 1);
sort(numbers, x + 1, right); 
}
return numbers;
}

最新更新