无法获得排序后的数组

Posted

技术标签:

【中文标题】无法获得排序后的数组【英文标题】: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;
    

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于无法获得排序后的数组的主要内容,如果未能解决你的问题,请参考以下文章

我无法在合并排序中使用java获得反转次数

如何获得一个排序数组进行二分查找操作?

perl快速获得数字在数组中的排序

将文本输入排序到数组中以获得简洁的异步存储代码

为啥名称在我的数组中重复,我将如何获得一个 txt 文件进行排序

是否可以对数组进行排序并仅获得展示位置的返回而不更改顺序