为了账号安全,请及时绑定邮箱和手机立即绑定

无法获得排序的数组

无法获得排序的数组

缥缈止盈 2023-05-24 16:32:45
无法识别我的错误,检查了很多请仔细检查它不会产生正确的输出,代码是通过 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 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

}

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


查看完整回答
反对 回复 2023-05-24
?
MMTTMM

TA贡献1869条经验 获得超4个赞

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

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


查看完整回答
反对 回复 2023-05-24
?
不负相思意

TA贡献1777条经验 获得超10个赞

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


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


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


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


yourArrayList.add(1)

 yourArrayList.add(3);

ETC...


完成后使用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);


查看完整回答
反对 回复 2023-05-24
  • 3 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信