快速排序 - 不能正常工作你能找到我错过逻辑的地方

时间:2011-07-28 09:30:44

标签: java quicksort

class test
 {
     static int arr[]={1,6,3,4,5,8,11};
     static int s=0,temp=0,e=0;
   public static void main(String [] args)throws Exception
   {
     QS(arr,0,arr.length-1);

    for(int i=0;i<arr.length;i++)
    System.out.print(arr[i]+"   ");

}

    public static void QS(int arr[] ,int i,int j)throws Exception
 {
int key=i;
int low=i+1;
int up=j;
int temp=0;
  System.out.println(key);   
 while(low<=up)
{
  do{
     low++;
    }while(arr[low]<arr[key]);

  do{
     up--;
    }while(arr[up]>arr[key]); 

 if(low<=up)
{   
   temp=arr[up];
   arr[up]=arr[low];
   arr[low]=temp;            
 }  
 }
   System.out.println(low+"++++"+up);

temp=arr[up];
arr[up]=arr[key];
arr[key]=temp;
if(0<up-1)        
      QS(arr,i,up-1);
if(low< arr.length-2)
      QS(arr,low,j);
   }
   }

2 个答案:

答案 0 :(得分:2)

因为这看起来像家庭作业,这是我的建议:

在分区步骤之后,打印出阵列以及数据和数据透视表的位置,并直观地验证分区是否已正确完成。如果还没有(我怀疑是这种情况),添加一些打印语句 - 或使用调试器 - 来了解程序出错的地方。

分区工作后,继续进行递归。这相对容易:您要做的就是确保QS使用正确的ij(两次)调用自身,并且正确处理基本情况。

答案 1 :(得分:1)

我认为问题在于获得支点。您可以编写一个单独的分区方法,并可能尝试打印相同的方法,并检查它是否打印正确的轴。 您可以参考以下关于快速排序的链接,它还提供有组织的代码片段。 http://www.algolist.net/Algorithms/Sorting/Quicksort