java - 这是快速排序的正确实现吗?

标签 java quicksort

<分区>

我想检查这是否是 QuickSort 的正确实现,它似乎在做这项工作,但我是否遗漏了什么?

public class QuickSort implements Sorter {

public void sort(Comparable[] items) {
    QuickSort(items, 0, items.length - 1);
}

static void QuickSort(Comparable[] items, int a, int b) {
    int lo = a;
    int hi = b;
    if (lo >= hi) {
        return;
    }
    Comparable mid = items[(lo + hi) / 2];
    Comparable T;

    while (lo < hi) {
        while (items[lo].compareTo(mid)<0) {
            lo++;
        }
        while (mid.compareTo(items[hi])<0) {
            hi--;
        }
        if (lo < hi) {
            T = items[lo];
            items[lo] = items[hi];
            items[hi] = T;
        }
    }

    QuickSort(items, a, lo);
    QuickSort(items, lo == a ? lo + 1 : lo, b);

}

固定:

private static void quickSort(Comparable[] items, int a, int b) {
    int i = a;
    int j = b;

    Comparable x = items[(a+ b) / 2];
    Comparable h;

    do {
        while (items[i].compareTo(x) < 0) {
            i++;
        }
        while (items[j].compareTo(x) > 0) {
            j--;
        }
        if (i <= j) {
            h = items[i];
            items[i] = items[j];
            items[j] = h;
            i++;
            j--;
        }
    } while (i <= j);

    if (a < j) {
        quickSort(items, a, j);
    }
    if (i < b) {
        quickSort(items, i, b);
    }
}

最佳答案

1 个小问题 - 这里有一个潜在的 int 溢出:

(低+高)/2

关于java - 这是快速排序的正确实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691026/

相关文章:

java - Tomcat 找不到 Spring Controller

java - 如何以编程方式在 WebApplicationInitializer 中注册多个 servlet?

java - 如何在所有操作系统上强制使用 JFrame Windows 主题

java - 随机枢轴无法快速排序

java - 线程安全框架

vba - VBA中的快速排序不忽略字母的大小写

java - QuickSort 算法的 StackOverFlow 错误

python - 第26行出现语法错误

algorithm - 如果快速排序算法中的第一个元素恰好是最小值怎么办

java - Apache Nifi 属性描述符的 dynamicallyModifiesClasspath() 的 Hello world 程序不起作用