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);
}
}
答案 0 :(得分:2)
因为这看起来像家庭作业,这是我的建议:
在分区步骤之后,打印出阵列以及数据和数据透视表的位置,并直观地验证分区是否已正确完成。如果还没有(我怀疑是这种情况),添加一些打印语句 - 或使用调试器 - 来了解程序出错的地方。
分区工作后,继续进行递归。这相对容易:您要做的就是确保QS
使用正确的i
和j
(两次)调用自身,并且正确处理基本情况。
答案 1 :(得分:1)
我认为问题在于获得支点。您可以编写一个单独的分区方法,并可能尝试打印相同的方法,并检查它是否打印正确的轴。 您可以参考以下关于快速排序的链接,它还提供有组织的代码片段。 http://www.algolist.net/Algorithms/Sorting/Quicksort