无法获得排序的数组

时间:2019-08-09 19:18:58

标签: java quicksort

无法识别我的错误,检查了很多订单,但没有产生正确的输出, 该代码是通过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;
    }
}

3 个答案:

答案 0 :(得分:2)

您的交换功能不起作用,这就是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;
}

注意:我尚未深入研究您的排序逻辑-一旦解决此问题,您也许就能弄清楚。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

ArrayList<Integer> yourArrayList = new ArrayList<Integer>();

在菱形运算符(<>)中插入数据类型,在这种情况下为 Integer ,但您也可以插入 Double ,以获得十进制结果。 / p>

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

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);