我这边总是报错

来源: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回答

liuyubobobo

2019-03-08

这个课程的所有代码都可以通过官方github获得(包括Java代码)。


这一小节的Java代码参考:https://github.com/liuyubobobo/Play-with-Algorithms/tree/master/03-Sorting-Advance/Course%20Code%20(Java)/08-Quick-Sort-Three-Ways/src/bobo/algo


在你的环境中,尝试运行一下课程的官方代码,看是否有问题?如果没有问题,请仔细调试比对,看自己的代码哪里写的有问题。


debug可是每一个程序员都逃不过的必修课。不断地通过debug,寻找自己逻辑上的漏洞,也是学习算法的重要方式,同时,也是提高自己编程水平的关键哦:)


加油!:)

1
3
liuyubobobo
回复
No双
那段代码不能直接删除。如果不要优化,需要写 if(l >= r) return;
2019-08-01
共3条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11213 学习 · 1617 问题

查看课程