我这边总是报错
来源:3-8 三路快速排序法

qq_一蓑烟雨任平生_15
2019-03-08
package sort.quick;
import java.util.Random;
public class QuickSort3Ways {
//快速排序之三路排序
public static int[] quickSort3Ways(int[] arr,int n) {
_quickSort3Ways(arr,0,n-1);
return arr;
}
private static void _quickSort3Ways(int[] arr, int min, int max) {
int randomIndex=0;
try {
randomIndex = new Random().nextInt(max-min+1)+min;
} catch (Exception e) {
System.out.println("max="+max+",min="+min);
}
int a =arr[randomIndex];
arr[randomIndex]=arr[min];
arr[min]=a;
int v=arr[min];
int left=min,i=min+1,right=max+1;
while(i<right) {
//arr[i]余arr[left+1]互换位置,left++,i++
if(arr[i]<v) {
int b=arr[i];
arr[i]=arr[left+1];
arr[left+1]=b;
left++;
i++;
}else if(arr[i]>v) {//arr[i]与 arr[right-1]互换位置,right--;
int c=arr[i];
arr[i]=arr[right-1];
arr[right-1]=c;
right--;
}else {
i++;
}
}
//互换arr[min]与arr[left的位置]
int d=arr[left];
arr[left]=arr[min];
arr[min]=d;
_quickSort3Ways(arr, min, left-1);
_quickSort3Ways(arr, right, max);
}
//生成随机数组
public static int[] generateRandomArray(int num,int min ,int max) {
int[] arr=new int[num];
for(int i=0;i<=num-1;i++) {
arr[i]=new Random().nextInt(max-min)+min;
}
return arr;
}
//生成随机数组
public static void printArray(int[] arr) {
for(int i=0;i<=arr.length-1;i++) {
System.out.print(arr[i]+" ");
}
}
public static void main(String[] args) {
int[] arr=generateRandomArray(200, 1, 100);
int n=arr.length;
arr=quickSort3Ways(arr, n);
printArray(arr);
}
}
写回答
1回答
-
这个课程的所有代码都可以通过官方github获得(包括Java代码)。
在你的环境中,尝试运行一下课程的官方代码,看是否有问题?如果没有问题,请仔细调试比对,看自己的代码哪里写的有问题。
debug可是每一个程序员都逃不过的必修课。不断地通过debug,寻找自己逻辑上的漏洞,也是学习算法的重要方式,同时,也是提高自己编程水平的关键哦:)
加油!:)
132019-08-01
相似问题