我在java中为quicksort编写了一个代码,同时将第一个元素视为pivot。如果我将第一个元素视为数组的最大元素,那么代码会给出一个ArrayOutOfBoundsException。虽然在C ++中实现相同的逻辑时逻辑运行正常。
import java.util.Scanner;
class QSort
{
private int n;
private int a[] = new int[n];
public QSort(int[] x)
{
n = x.length;
a = x;
}
private int qs(int low,int up)
{
int pivot = a[low];
int p = low+1,q = up;
while(q>=p)
{
while(pivot>=a[p])
p++;
while(pivot<a[q])
q--;
if(q>p)
{
a[p]=a[p]+a[q]-(a[q]=a[p]); //swapping(a[p],a[q])
p++;
q--;
}
}
a[low]=a[low]+a[q]-(a[q]=a[low]); //swapping(a[low],a[q])
return q;
}
public void quicksort(int low,int up)
{
if(low<up)
{
int i = qs(low,up);
quicksort(low,i-1);
quicksort(i+1,up);
}
}
public void print()
{
System.out.println("\nThe sorted array is :");
for(int i=0; i<a.length; i++)
{
System.out.println(a[i]);
}
}
}
class Quick
{
public static void main(String args[])
{
System.out.print("\nEnter the no. of values : ");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x[] = new int[n];
System.out.println("\nEnter the elements :");
for(int i=0; i<n; i++)
x[i] = sc.nextInt();
QSort s = new QSort(x);
s.quicksort(0,n-1);
s.print();
}
}