猿问

无法获得排序的数组

无法识别我的错误,检查了很多请仔细检查它不会产生正确的输出,代码是通过 java 快速排序的实现。此代码产生与输入相同的输出,因为我是 java 和算法的新手,我无法弄清楚。


class Codechef

{

    public static void main (String[] args) throws java.lang.Exception

    {

        int a[]=new int[5];

        Scanner s=new Scanner(System.in);


        for(int i=0;i<5;i++)

            a[i]=s.nextInt();


        quick(a,0,4);


        for(int i=0;i<5;i++)

            System.out.print(a[i]+" ");

    }


    public static void quick(int a[],int s,int l)

    {

        if(s<l)

        {

            System.out.println("in quick");


            int pi=part(a,s,l);


            quick(a,s,pi-1);

            quick(a,pi+1,l);


        }

    }


    public static int part(int a[],int s,int l)

    {

        System.out.println("in part");

        int pivot=a[l];

        int pin=s;


        for(int i=s;i<l;i++)

        {

            if(a[i]<=pivot)

            {

                swap(a[i],a[pin]);

                pin++;

            }

        }


        swap(a[pin],a[l]);

        System.out.println(pin);


        return pin;     

    }


    public static void swap(int a,int b)

    {

        System.out.println("in swap");

        int t;

        t=a;

        a=b;

        b=t;

    }

}


缥缈止盈
浏览 117回答 3
3回答

慕田峪7331174

您的交换功能不起作用,这就是为什么quick您的阵列保持不变的原因。这正好解决了您的问题:Java: Why does does this swap method not work? -- 这些是基本概念,理解它们是值得的。无论如何,既然你正在处理一个数组,你可以这样去做:/** Swap array[i] and array[j] */public static void swap(int[] array, int i, int j){    int t = array[i];    array[i] = array[j];    array[j] = t;}注意:我没有深入研究你的排序逻辑——一旦这个问题得到解决,你也许就能弄明白。

MMTTMM

调用 swap 时实际上并没有交换数组元素。该方法所做的只是交换参数。您可以将数组与索引一起传递到交换方法中,或者更实际地说,只需将交换代码复制到您的部分方法中

不负相思意

我不知道您是否正在学习 QuickSort,但是如果您想要一种快速对数字列表进行排序的方法,我建议您使用 ArrayList,它基本上是这样声明的:ArrayList<Integer> yourArrayList = new ArrayList<Integer>();在菱形运算符 (<>) 中插入数据类型,在本例中为Integer,但您也可以插入Double以获得小数结果。声明后,您必须添加您的号码:yourArrayList.add(1)&nbsp;yourArrayList.add(3);ETC...完成后使用Collections.sort(yourArrayList);我希望我很清楚,这是使用它的代码:&nbsp; &nbsp;ArrayList<Integer> yourArrayList = new ArrayList<Integer>();&nbsp;&nbsp; &nbsp;yourArrayList.add(10);&nbsp; &nbsp;yourArrayList.add(3);&nbsp; &nbsp;yourArrayList.add(7);&nbsp; &nbsp;yourArrayList.add(-3);&nbsp; &nbsp;&nbsp; &nbsp;Collections.sort(yourArrayList);&nbsp; &nbsp;System.out.println(yourArrayList);
随时随地看视频慕课网APP

相关分类

Java
我要回答