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