递归排序数组

时间:2018-12-02 18:34:01

标签: java recursion

public static void main(String[] args) {

    BufferedReader br = null;
    try {
        // reading csv file
        br = new BufferedReader(new FileReader("/Users/andreeacondrut/Desktop/global_management.csv"));

        // create list to hold products

        List<Product2> product2List = new ArrayList<Product2>();

        String line = "";

        br.readLine();

        while ((line = br.readLine()) != null) {
            String[] productDetails = line.split(COMMA_DELIMITER);

            if (productDetails.length > 0) {
                // save the product2 information into product2 object
                Product2 productList = new Product2(productDetails[0], Double.parseDouble(productDetails[1]),
                        productDetails[2], productDetails[3], Integer.parseInt(productDetails[4]));

                product2List.add(productList);

            }
            Global_Inventory_Manager im = new Global_Inventory_Manager();
            im.sortArray(productDetails);
        }

        // print product
        for (Product2 e : product2List) {
            System.out.println(e.getName() + "," + e.getPrice() + "," + e.getDescription() + "," + e.getImagePath()
                    + "," + e.getQuantity());
        }

    } catch (Exception ee) {
        ee.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException ie) {
            System.out.println("ERROR occured while closing the BufferedReader.");
            ie.printStackTrace();
        }
    }
    void sortArray(String[] productDetails) {
    int n = productDetails.length;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1; j++) {
            if (productDetails[j] > productDetails[j + 1]) {
                String temp = productDetails[j];
                productDetails[j] = productDetails[j + 1];
                productDetails[j + 1] = temp;
            }
        }
    }
}

我正在尝试按数量和名称对产品数组进行递归排序。我远没有成功。不幸的是,我发现的任何示例我都不理解。这段代码给我一个错误,提示“未解决的编译问题:     未为参数类型java.lang.String,java.lang.String定义运算符>。对不起,如果我的代码格式错误,这是我第一次使用堆栈溢出,并且没有读取排序方法顶部。该如何解决?

1 个答案:

答案 0 :(得分:1)

我建议您做一些改进/更改:

  1. productDetails[j] > productDetails[j + 1]更改为productDetails[j].compareTo(productDetails[j + 1]) > 0。 Java中的StringComparable。您已经为String对象定义了compareTo。有关其工作原理的详细信息,请查看here
  2. 明智的设计,为什么不使用Arrays.sort()已经赋予您的排序
  3. 您正在使用类似于Bubble sort的方法。时间复杂度为O(n^2)。为什么不使用某种采用O(n*log(n))的排序算法?更好的建议是使用时间复杂度为O(n*log(n))的{​​{3}}。
  4. 避免将所有内容都放入main方法中。模块化您的代码。
  5. 避免将整个方法包装在try-catch中。更好的方法是在方法签名中添加一个throws

尽管此答案对您还没有问过的许多其他问题进行了评论,但是我认为您的目的是学习和改进,在这方面我只是给您一点帮助:)