public void sort(int left,int right,int arry[])
{
//先找到一个中间数
int pivot = arry[(left+right)/2];
int temp=0;
 
while(left<right)
{
while(arry[left]<pivot) left++;
while(arry[right]>pivot) right--;

if(left>=right) 
break;
temp=arry[left];
arry[left]=arry[right];
arry[right]=temp;

if(arry[left]==pivot) --right;
if(arry[right]==pivot) ++left;


}
if(left==right)
{
left++;
right--;
}
if(left<right)
sort(left,right,arry);
if(right>left)
sort(left,right,arry); }mian方法调用
                  public static void main(String[] args) {

int len = 800000;
int[] arry= new int[len];
for(int i=0;i<len;i++)
{
int rod = (int)(Math.random()*10000);
arry[i]=rod;
}
QuickSort qs = new QuickSort();
Calendar cal = Calendar.getInstance();
System.out.println("开始时间"+cal.getTime());
qs.sort(0,arry.length-1, arry);
cal = Calendar.getInstance();
System.out.println("结束时间"+cal.getTime());
/* for(int i=0;i<arry.length;i++)
{

System.out.println(arry[i]+" ");
}*/ }

解决方案 »

  1.   

    看了前两句,就没看了,你int pivot = arry[(left+right)/2];万一left+right=奇数,你这句话难道还不报错?
      

  2.   

    要给数组排序何必需要中间数,参数有那个数组就够了,使用冒泡排序就搞定.....用它自己的第一个元素作为排序的基础,不停的两两交换,将最小的数不停的往第一个数排过去,就OK,貌似JAVA本身就有数组排序方法,
    sort();
      

  3.   

    为什么会报错?加入left+right=7,那(left+right)/2=3,会有报错吗?
      

  4.   

    正解...lz,快速排序不是你那样的,中间数不是指排在中的那个数,而是一个参照值。一般left应该是0,right应该是arry.length()-1;即数组第一个数和最后一个数的index。而且快速排序不是一次就排好的,最好写个递归的方法。