我正在使用quicksort编写代码但无法看到它使其正常工作。
我已经将我的数组声明为20并用随机整数填充它。然后我调用了我的sort
方法进行快速排序。 show
方法只打印输出。我的代码仍然无法正常工作。
我的快速排序代码:
public class JavaApplication3 {
public static void main(String[] args) {
QuickSort B = new QuickSort();
int[] snum = new int [20];
for(int index = 0; index < snum.length; index++ ){
snum[index]= (int) (Math.random ());
}
B.sort(snum);
B.show(snum);
}
}
class QuickSort{
public static void sort(int [] a ){
quicksort(a, 0, a.length -1);
}
private static void quicksort(int[] a, int lo, int hi){
if(hi <= lo) return;
int j = partition(a, lo, hi);
quicksort(a, lo, j-1);
quicksort(a, j+1, hi);
}
private static void exch(int [] a, int i, int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
private static int partition(int[] a, int lo, int hi){
int i= lo;
int j = hi+1;
int pivot = a[lo];
while(i<=j){
while(a[i] < pivot){
i++;
}
while(a[j] > pivot){
j--;
}
if(i <= j){
exch(a, i, j);
i++;
j--;
}
}
if (lo < j)
quicksort(a, lo, j);
if (i < hi)
exch(a, i, j);
return j;
}
public static void show(int[]a){
for(int i=0; i<a.length;i++)
System.out.print(a[i] + " ");
System.out.println();
}
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException: 20在javaapplication3.QuickSort.partition(JavaApplication3.java:61) 在javaapplication3.QuickSort.quicksort(JavaApplication3.java:43)at javaapplication3.QuickSort.sort(JavaApplication3.java:39)at javaapplication3.JavaApplication3.main(JavaApplication3.java:29)Java 结果:1
答案 0 :(得分:0)
一个问题是Math.random会生成小于1的小数,当您将其转换为int时,这些数字会导致0.因此将math.random乘以10。
答案 1 :(得分:0)
希望这会有所帮助。
int hoaresPartition(int *arr, int lo, int hi){
int pivot = arr[lo];
int i = lo - 1;
int j = hi + 1;
while (true){
do {
j = j -1;
}while (arr[j] > pivot);
do {
i = i+1;
}while (arr[i] < pivot);
if ( i < j){
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}else
return j;
}
}