在使用快速排序对数组进行排序之前,我想检查数组是否已排序。我总是在第 77 行遇到 stackoverflow,或者在第 65 行遇到数组索引越界错误。我的基本想法是检查前两个数字是否已排序,然后检查第二个和第三个,依此类推。如果它们未排序,则整个 while 循环应取消并使用快速排序开始排序,使用最后一个正确的排序值作为比较值。
public class customQuickSort
{
Runtime runtime = new Runtime();
private int[] a;
private int n;
boolean isSorted = true;
int arraySortCount = 0;
int x = 0;
public customQuickSort(int[] unsorted)
{
sort(unsorted);
}
@Override
public void sort(int[] a)
{
this.a=a;
n=a.length;
runtime.start();
quicksort(0, n-1);
runtime.end(getCounter());
}
private void quicksort (int lo, int hi)
{
int i=lo, j=hi;
while(isSorted = true && arraySortCount < a.length-1)
{
if(a[arraySortCount] <= a[(arraySortCount+1)])
{
if(arraySortCount == a.length-2)
{
System.out.println("array sorted ascending");
}
}
else if(a[arraySortCount] >= a[(arraySortCount+1)])
{
if(arraySortCount == a.length-2)
{
System.out.println("array sorted descending");
}
}
else
{
isSorted = false;
x=a[c(arraySortCount)];
System.out.println("unsorted");
}
arraySortCount++;
}
if(isSorted == false)
{
while (i<=j)
{
while (a[i]<x)
{
i++;
}
while (a[j]>x)
{
j--;
}
if (i<=j)
{
exchange(i, j);
i++; j--;
}
}
if (lo<j) quicksort(lo, j);
if (i<hi) quicksort(i, hi);
}
}
private void exchange(int i, int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}