Java Can';我不明白为什么我的排序算法这么慢

Java Can';我不明白为什么我的排序算法这么慢,java,Java,所以我在玩快速排序,我注意到一些奇怪的事情,每当我超过10个值进行排序时,与插入排序相比,排序需要很长的时间。有人能解释一下为什么每当我要求它对10个以上的值进行排序时,它会如此慢吗?也许这和代码有关 编辑。我做了一些更改,现在我得到了堆栈溢出错误,太好了 public class quicksorttest{ public static void main(String args[]){ int array[] = new int[100]; for

所以我在玩快速排序,我注意到一些奇怪的事情,每当我超过10个值进行排序时,与插入排序相比,排序需要很长的时间。有人能解释一下为什么每当我要求它对10个以上的值进行排序时,它会如此慢吗?也许这和代码有关

编辑。我做了一些更改,现在我得到了堆栈溢出错误,太好了

       public class quicksorttest{
   public static void main(String args[]){
      int array[] = new int[100];
      for(int a =0; a<array.length;a++){
         array[a] = (int)(Math.random()*100);
      }

      quickSort(array,0,array.length);
   }

   public static void quickSort(int array[],int p, int q){
    if(q-p <=1);//skip

    else{
        int x; int i,j,k;
        //let x = middle element in f[p..q-1]. 

        x= array[(p+q/2)];
        i=p;j=p;k=q;
        while(j!=k){
            if(array[j]==x)
                j=j+1;
            else if(array[j]<x){    //swap array[j] with array[i]
                int temp =array[j];
                array[j] = array[i]; array[i]=temp;
                j=j+1;i=i+1;

            }
            else{//array[j]>x
                //swap array[j[ with array[k-1]
                int temp = array[j]; 
                array[j] = array[k-1]; array[k-1]=temp;
                k=k-1;
            }
        }

        quickSort(array,p,i);
        quickSort(array,j,q);

    }
   }
}
公共类quicksorttest{
公共静态void main(字符串参数[]){
int数组[]=新的int[100];

对于(int a=0;a我处理算法的方法,尤其是递归算法,应遵循以下粗略计划:

  • 从空数组开始
  • 尝试使用1个元素的数组
  • 尝试一个包含2个元素的数组(前三个元素很重要,因为它们通常是递归方法的结束状态/)
  • 尝试一个包含3或4个元素的数组,但在同一集合中尝试一段时间,以便可以重现结果。如果随机集合出现故障,但在下一次运行时仍然有效,则您可能不知道是否已修复该问题,或者是您尝试的数据
只有在重复上述工作之后,才应该尝试更大的数据集,然后最终尝试随机数据

在您的例子中,小问题很少,但递归问题中的小问题可能会成倍增加!:-)

首先,尝试上面的方法-如果您仍然遇到困难,可以在以下网站上找到一个非常好的简单实现:


值得添加System.out.println语句(对于小数据集-对于大数据集,这不太有用),或者最好使用调试器(IntelliJ、Eclipse、Netbeans等)

请修复缩进。使用Eclipse(或任何您使用的工具)调试器并逐步完成您的代码。这应该可以很容易地了解为什么您的算法要花这么长时间才能完成。很抱歉缩进。我以前从未真正深入研究过调试器,但我会尝试一下。另外,请阅读Java编码约定(驼峰大小写、大写与小写)。是否“花费很长时间”意味着它不会终止?我觉得与pivot相比,至少有一个条件应该是
=
,而不仅仅是
,因为那样算法可能会死锁。感谢您的输入:),这样我就可以让它在小数据集上工作,但当我在上面时,我得到了arrayindexoutofbounds错误