java - 快速排序。处理重复项

标签 java sorting duplicates quicksort

谁能告诉我如何使用我的函数在 QuickSort 中处理重复项?

private static int[] quickSort(int[] input, int left, int right) {
    int mid = (left + right) / 2;
    int i = left;
    int j = right;

    if((right - left) < 1) {
        return new int[]{};
    }

    while(i <= j) {
        while((input[i] < input[mid])) {
            i++;
        }

        while((input[j] > input[mid])) {
            j--;
        }

        if(i <= j) {
            int temp = input[i];
            input[i] = input[j];
            input[j] = temp;
            i++;
            j--;
        }
    }

    if(j > left) {
        input = quickSort(input, left, j);
    }

    if(i < right) {
        input = quickSort(input, i, right);
    }
    return input;
}

最佳答案

代码有几个问题。

  • “返回新的 int[]{};”这将生成新数组并不必要地消耗内存。您可以返回“输入”。
  • 对于第一个内部循环,您可能需要“input[i] <= input[mid] && i < mid”。这将处理重复项。

这里有一些经过良好测试的代码:Quick Sort

关于java - 快速排序。处理重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18460626/

相关文章:

java - SVN关键字配置

java - 如何控制 Java 中的文件压缩参数以更快地解压缩对象?

c++ - 找出数字之间的最大差异

ruby-on-rails - Rails 3 通过父关联排序

PHP SQL防止重复用户名: Catching Exception vs Select Query

Java NullPointerException 当我调用自定义类上的方法时

java - Case 类导致 java.lang.ExceptionInInitializerError

jquery - 使用 Jquery 数据表对数据排序属性中的值进行自定义排序

python - 在数据框中添加一列,对现有列的不同行执行不同的操作

php - 用重复值更新行