【问题标题】:not able to get the sorted array无法获得排序后的数组
【发布时间】:2019-12-17 13:03:54
【问题描述】:

无法识别我的错误,检查了很多请仔细检查它不会产生正确的输出, 代码是通过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;
    }
}

【问题讨论】:

    标签: java quicksort


    【解决方案1】:

    您的交换功能不起作用,这就是quick 保持您的数组不变的原因。

    这正好解决了您的问题:Java: Why 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;
    }
    

    注意:我没有深入研究你的排序逻辑——一旦这个问题得到解决,你也许就能弄清楚。

    【讨论】:

    • 当我只是用代码替换我的函数调用时,它工作得很好,但是当我将数组传递给你提到的交换函数时,它会以某种方式生成数组索引越界异常。
    【解决方案2】:

    调用 swap 时实际上并没有交换数组元素。该方法所做的只是交换参数。

    您可以将数组与索引一起传递到交换方法中,或者更实际地,只需将交换代码复制到您的部分方法中

    【讨论】:

      【解决方案3】:

      我不知道你是否正在学习快速排序,但如果你想要一种快速对数字列表进行排序的方法,我建议你使用 ArrayList,它基本上是这样声明的:

      ArrayList&lt;Integer&gt; yourArrayList = new ArrayList&lt;Integer&gt;();

      在菱形运算符()中插入数据类型,本例为Integer,但也可以插入Double,得到小数结果。

      声明后,您必须添加您的号码:

      yourArrayList.add(1)
       yourArrayList.add(3);
      

      等等……

      完成后使用 Collections.sort(yourArrayList);

      希望我说清楚了,这是使用它的代码:

         ArrayList<Integer> yourArrayList = new ArrayList<Integer>();
       
         yourArrayList.add(10);
         yourArrayList.add(3);
         yourArrayList.add(7);
         yourArrayList.add(-3);
         
         Collections.sort(yourArrayList);
         System.out.println(yourArrayList);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        相关资源
        最近更新 更多