我想构建一个排序方法,将数组“4,2,7,5,1”排序为“1,2,4,5,7”,我当前的代码是
public static Node<Integer> sort_it(int[] arr, int fst, int last, Node<Integer> part_soln)
{
if (fst>last)
return part_soln; // return a sorted list
else {
for (int row=0; row<=last; row++)
{
if (!exists(arr[row],part_soln) && ((arr[row]<=part_soln.getItem())||part_soln==null))
{
Node<Integer> new_soln = new Node<Integer>(row,part_soln);
Node<Integer> ret=sort_it(arr,fst++,last,new_soln);
if(ret!=null)
return ret;
}
}
return null;
}
}
出了什么问题
答案 0 :(得分:1)
我首先看到的是,当您调用递归方法时,您使用的是fst++
而不是++fst
。
答案 1 :(得分:1)
如果这不是作业,那么你应该使用Arrays.sort(int [])来对Java中的int进行排序。
答案 2 :(得分:0)
您可以使用预先存在的排序方法,并依赖Integer
(或任何其他类型)的自然排序。您需要做的就是为compareTo
编写转发Comparable
方法(实现Node
),检查泛型参数是否实现'Comparable'
,然后将方法调用转发给{{ 1}}存储的对象。
您将值存储为字段,然后只使用正常的“instanceof”检查来检查compareTo
是否已实现,强制转换为Comparable
然后只调用该方法。简单。现在,您可以使用Comparable
其中Arrays.sort(nodearray)
是nodearray
的数组。这就是你追求的吗? :)
排序算法是一个经过调整的快速排序。
正如另一张海报所提到的,如果你有一个Node<?>
或int
的数组,你可以直接使用Integer
方法,但我们需要转发该呼叫,因为封装在Arrays.sort(..)
班。
从Arrays.java实现快速排序(你可以修改它):
Node