无法获得排序后的数组
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<Integer> yourArrayList = new ArrayList<Integer>();
在菱形运算符()中插入数据类型,本例为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);
【讨论】:
以上是关于无法获得排序后的数组的主要内容,如果未能解决你的问题,请参考以下文章