日期:2014-05-20  浏览次数:20726 次

同样一个数组,用scanner和用random输入,最后产生不同的结果
import java.util.*;

public class QuickSort {
public static void quicksort(int b,int e,int[] y){
if(b>=e)
return;
int m=partition(b,e,y);
quicksort(b,m-1,y);
quicksort(m+1,e,y);
}

public static int partition(int b,int e,int[] y){
int p=b;
int q=e;
int flag=e;
while(true){
while(y[p]<y[flag] && p<flag) p++;
while(y[q]>y[flag] && q>b) q--;
if(p>=q){
exch(p,flag,y);
return p;
}else
exch(p,q,y);
}
}

public static void exch(int b,int e,int[] y){
int storage=y[b];
y[b]=y[e];
y[e]=storage;
}

public static int[] RInt(int number){
Random random=new Random();
int[] arr=new int[number];
for(int i=0;i<arr.length;i++){
arr[i]=random.nextInt(1000);
}
return arr;
}

public static void main(String[] args){

// 用scanner输入
Scanner sc=new Scanner(System.in);
int length=sc.nextInt();
int[] arr=new int[length];
for(int i=0;i<length;i++)
arr[i]=sc.nextInt();
sc.close();

// 用random产生数组
/* int[] arr=RInt(40);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i] + " ");
*/
System.out.println();
quicksort(0,arr.length-1,arr);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i] + " ");
}
}

用scanner时
input 

1 2 4 5 7

然后就一直不走了,只能ctrl+c强行终止

用random时
会出结果,并且正确排序

不知这两种输入为什么造成结果这么大的不同?

------解决方案--------------------
正常输入流是应该关的啊,就是因为数组初始化的时候小了,干什么建议人家不关输入流?
------解决方案--------------------
Scanner方式运行正常。楼主是不是少输入数字了?