繁体   English   中英

如何修复Java快速排序?

[英]How can I fix my java quick sort?

问题是,这是无休止的递归。 我不知道如何完成递归。 有趣的是,它可以工作,如果我打印arraylist(mergedArray),它将在经过一些迭代后进行排序,但是该功能永远不会停止。 错误消息是:

“在javaapplication9.QuickSort.simple_quick_sort(QuickSort.java:40)”

下面的代码:

public ArrayList<Integer> simple_quick_sort(ArrayList<Integer> arr) {
    ArrayList<Integer> mergedArray = new ArrayList<Integer>();
    ArrayList<Integer> left = new ArrayList<Integer>();
    ArrayList<Integer> right = new ArrayList<Integer>();
    if (arr.size() <= 1) {
        return arr;
    }
    else {
        int pivot = arr.get(0);
        for (int i = 0; i < arr.size(); i++) {
            if (arr.get(i) < pivot) {
                left.add(arr.get(i));
            }
            else {
                right.add(arr.get(i));
            }
        }

    } 
    mergedArray.addAll(left);
    mergedArray.addAll(right);
    simple_quick_sort(mergedArray);
    return mergedArray;
}
public ArrayList<Integer> simple_quick_sort(ArrayList<Integer> arr) {

  if (arr.size() <= 1) {
    return arr;
  }
  else {
    ArrayList<Integer> mergedArray = new ArrayList<Integer>();
    ArrayList<Integer> left = new ArrayList<Integer>();
    ArrayList<Integer> right = new ArrayList<Integer>();
    int pivot = arr.get(0);
    for (int i = 0; i < arr.size(); i++) {
        if (arr.get(i) < pivot) {
            left.add(arr.get(i));
            left = simple_quick_sort(left);
        }
        else {
            right.add(arr.get(i));
            right = simple_quick_sort(right);
        }
    }

  } 
  mergedArray.addAll(left);
  mergedArray.addAll(right);
}

当然,复制与quicksort的基本思想相反,后者很不错,因为它可以在要排序的阵列上工作,而无需这些复制操作和存储分配。

抱歉,您对quicksort的整个实现有点不正确。 同样,在递归函数内部使用循环会否决使用递归的好处。 如果要实现该循环,我建议您将其嵌套在另一个循环中,以使代码更简单(不会像递归那样有效)。

如果要继续使用该程序,请尝试进行以下更改:编写时

simple_quick_sort(mergedArray);
return mergedArray;

您没有使用该函数返回的值。 您只是在调用函数,而对返回的值不做任何事情。 在此代码生效之前,可能还有更多需要修复的问题。 如果您想了解有关快速排序和递归的更多信息,我发现了此页面http://www.geeksforgeeks.org/quick-sort/

我希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM