Java 快速排序-工作不正常,请您找出我遗漏逻辑的地方 类测试 { 静态int-arr[]={1,6,3,4,5,8,11}; 静态int s=0,temp=0,e=0; 公共静态void main(字符串[]args)引发异常 { QS(arr,0,arr.length-1); 对于(int i=0;i

Java 快速排序-工作不正常,请您找出我遗漏逻辑的地方 类测试 { 静态int-arr[]={1,6,3,4,5,8,11}; 静态int s=0,temp=0,e=0; 公共静态void main(字符串[]args)引发异常 { QS(arr,0,arr.length-1); 对于(int i=0;i,java,quicksort,Java,Quicksort,,因为这看起来像是家庭作业,我的建议如下: 在分区步骤之后,打印出数组以及pivot的值和位置,并直观地验证分区是否正确完成。如果分区没有正确完成(我怀疑是这样),请添加更多的打印语句——或者使用调试器——以了解程序哪里出了问题 一旦分区开始工作,就转到递归。这相对简单:您所要做的就是确保QS使用正确的i和j(两次)调用自己,并且基本情况得到正确处理。因为这看起来像是家庭作业,我的建议如下: 在分区步骤之后,打印出数组以及pivot的值和位置,并直观地验证分区是否正确完成。如果分区没有正确完成(

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

在分区步骤之后,打印出数组以及pivot的值和位置,并直观地验证分区是否正确完成。如果分区没有正确完成(我怀疑是这样),请添加更多的打印语句——或者使用调试器——以了解程序哪里出了问题


一旦分区开始工作,就转到递归。这相对简单:您所要做的就是确保
QS
使用正确的
i
j
(两次)调用自己,并且基本情况得到正确处理。

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

在分区步骤之后,打印出数组以及pivot的值和位置,并直观地验证分区是否正确完成。如果分区没有正确完成(我怀疑是这样),请添加更多的打印语句——或者使用调试器——以了解程序哪里出了问题


一旦分区开始工作,就转到递归。这相对简单:您所要做的就是确保
QS
使用正确的
i
j
调用自己(两次),并确保基本情况得到正确处理。

我认为问题在于获取数据透视。您可以编写一个单独的分区方法,并可能尝试打印相同的方法,并检查其是否打印正确的数据透视。 您可以参考下面关于快速排序的链接,它还提供有组织的代码段。

我认为问题在于获取数据透视。您可以编写一个单独的分区方法,并可能尝试打印相同的数据透视,然后检查打印的数据透视是否正确。 您可以参考下面关于快速排序的链接,它还提供有组织的代码段。

我从两个小时开始调试它,我没有得到解决方案我从两个小时开始调试它,我没有得到解决方案我将pivot作为分区中的第一个元素,这是快速排序的一个变体。我将pivot作为分区中的第一个元素,这是快速排序的一个变体。
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);
   }
   }