Java回溯问题

时间:2010-10-25 01:40:42

标签: java backtracking

我想构建一个排序方法,将数组“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; 
    }
}

出了什么问题

3 个答案:

答案 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