Java 快速排序算法是一个简单的实现。但是为什么';这不管用吗?

Java 快速排序算法是一个简单的实现。但是为什么';这不管用吗?,java,Java,我对编程和java非常陌生,所以请不要嘲笑我:)。现在..我在网上寻找快速排序算法的正确实现,我知道这一点。但我试图用我能想到的最天真、最基本的方式来实现它。实际创建两个独立的数组(左、右)并继续对它们进行排序等等 代码如下: package excercise; public class MyQuickSort { public static int list[] = {6,5,3,1,8,7,2,4}; public static int[] addNumberTo

我对编程和java非常陌生,所以请不要嘲笑我:)。现在..我在网上寻找快速排序算法的正确实现,我知道这一点。但我试图用我能想到的最天真、最基本的方式来实现它。实际创建两个独立的数组(左、右)并继续对它们进行排序等等

代码如下:

package excercise;

public class MyQuickSort {


    public static int list[] = {6,5,3,1,8,7,2,4};


    public static int[] addNumberToArray(int array[],int num){
        int newArray[] = new int[array.length+1];
        for(int i = 0;i<array.length;i++){
            newArray[i] = array[i];
        }
        newArray[newArray.length-1] = num;
        array = newArray;
        return array;
    }


    public static int[] partition(int arr[]){

        while(arr.length>1){
            int pivotIndex = (int)(arr.length/2);
            int left[] = new int[0];
            int right[] = new int[0];

            for(int i = 0;i<arr.length;i++){
                if(i==pivotIndex){
                    continue;
                }

                else if(arr[i]<=arr[pivotIndex]){
                    left = addNumberToArray(left,arr[i]);
                }
                else{
                    right = addNumberToArray(right,arr[i]);
                }
            }
            int origPivot = arr[pivotIndex];
            int k = 0;
            while(k<left.length){
                arr[k] = left[k];
                k++;
            }
            arr[k] = origPivot;
            k++;
            while(k<arr.length){
                arr[k] = right[k-(left.length+1)];
            }


            if(left.length>1){
            partition(left);
            }

            if(right.length>1){
            partition(right);
            }

        }

            return arr;
    }




    public static void main(String[]args){
            list = partition(list);
            for(int i = 0;i<list.length;i++){
                System.out.print(list[i]+" ");
            }

        }
    }
套餐练习;
公共类MyQuickSort{
公共静态整数列表[]={6,5,3,1,8,7,2,4};
公共静态int[]addNumberToArray(int数组[],int num){
int newArray[]=newint[array.length+1];
对于(int i=0;i1){
int数据透视索引=(int)(arr.length/2);
左整数[]=新整数[0];
int right[]=新int[0];

对于(inti=0;i,您的算法陷入了这个循环

while(k<arr.length){
    arr[k] = right[k-(left.length+1)];
}

while(kCool!您的实现似乎在逻辑上描述了快速排序。但是,请注意,快速排序不能使用额外的缓冲区来实现。它应该在自己的主数组中排序,递归只传递开始和结束边界的调用。您的实现更像是一种合并排序样式,使用快速排序逻辑。是的,您错过了正如上面的评论员所说,他是k++的。

好的。

你是对的,我完全忘了在这里做k的增量。。我希望这能解决它。但可能还有另一个问题。我想这与这里的递归有关。。我肯定做错了什么。我真的很喜欢这样做。如果你有其他想法的话,我很高兴听到:)我添加了代码,还有一个小问题需要解决。如果你可以,请帮助。你的排序无论如何都不会工作,因为你的排序条件是错误的。此外,你的排序不好,因为你总是创建不太好的int数组。我添加了代码,还有一个小问题需要解决。如果可以,请帮助
while(k<arr.length){
    arr[k] = right[k-(left.length+1)];
}
while(k<arr.length){
    arr[k] = right[k-(left.length+1)];
    k++;
}