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时
会出结果,并且正确排序不知这两种输入为什么造成结果这么大的不同?

解决方案 »

  1.   

     请仔细看看程序,你用scanner时输入的第一个数是数组的长度,你输入的是5当然输入5个数后就走不下去了
      

  2.   

    把这句删了,sc.close();
    5  
    1 2 4 5 7 接着按回车,应该就可以了。
      

  3.   


    其实sc.close()是为了好看后来加上的,应该对原问题没什么影响其实原来的问题是Scanner sc=new Scanner(System.in);
     int length=sc.nextInt();
     int[] arr1=new int[length];
     int[] arr2=new int[length];
     for(int i=0;i<length;i++){
       arr1[i]=sc.nextInt();
       arr2[i]=sc.nextInt();
     } 然后我在dos下输入
     5
     1 2
     2 3
     3 4
     再继续输入就卡死了 在eclipse下倒是可以全部输完,打印两个数组也没问题,但到下一步(quicksort)就卡死了
      

  4.   

    Scanner方式运行正常。楼主是不是少输入数字了?