五大经典排序
本文最后更新于 1107 天前,其中的信息可能已经有所发展或是发生改变。

冒泡排序 (Bubble Sort)

public void asc(List<Integer> list) {
    for (int i = 0; i < list.size() - 1; i++) {
        for (int j = 0; j < list.size() - i - 1; j++) {
            if (list.get(j) > list.get(j + 1)) {
                Integer tag = list.get(j);
                list.set(j, list.get(j + 1));
                list.set(j + 1, tag);
            }
        }
    }
}

选择排序 (Insertion Sort)

public void asc(List<Integer> list) {
    for (int i = 0; i < list.size() - 1; i++) {
        int index = i;
        for (int j = i + 1; j < list.size(); j++) {
            if (list.get(index) > list.get(j)) {
                index = j;
            }
        }
        Integer tag = list.get(i);
        list.set(i, list.get(index));
        list.set(index, tag);
    }
}

插入排序 (Selection Sort)

public void asc(List<Integer> list) {
    for (int i = 1; i < list.size(); i++) {
        for (int j = i; j > 0 && list.get(j) < list.get(j - 1); j--) {
            Integer tag = list.get(j);
            list.set(j, list.get(j - 1));
            list.set(j - 1, tag);
        }
    }
}

快速排序 (Quick Sort)

public void asc(List<Integer> list) {
    if (list == null || list.size() < 2) {
        return;
    }
    int size = list.size();
    int p = size - 1;
    int left = 0;
    int right = p - 1;
    while (left < right) {
        if (list.get(left) < list.get(p)) {
            left++;
        } else {
            if (list.get(right) > list.get(p)) {
                right--;
            } else {
                Integer tag = list.get(left);
                list.set(left, list.get(right));
                list.set(right, tag);
            }
        }
    }
    if (list.get(left) > list.get(p)) {
        Integer tag = list.get(p);
        list.set(p, list.get(left));
        list.set(left, tag);
    }
    asc(list.subList(0, left + 1));
    asc(list.subList(left + 1, size));
}

归并排序 (Merge Sort)

public void asc(List<Integer> list) {
    if (list == null || list.size() < 2) {
        return;
    }
    int size = list.size();
    int mid = size / 2;
    List<Integer> listA = list.subList(0, mid);
    asc(listA);
    List<Integer> listB = list.subList(mid, size);
    asc(listB);
    List<Integer> tag = new ArrayList<>(size);
    int a = 0;
    int b = 0;
    while (a < listA.size() && b < listB.size()) {
        if (listA.get(a) < listB.get(b)) {
            tag.add(listA.get(a));
            a++;
        } else {
            tag.add(listB.get(b));
            b++;
        }
    }
    if (a == listA.size()) {
        tag.addAll(listB.subList(b, listB.size()));
    } else if (b == listB.size()) {
        tag.addAll(listA.subList(a, listA.size()));
    }
    for (int i = 0; i < tag.size(); i++) {
        list.set(i, tag.get(i));
    }
}
如果觉得本文对您有帮助,记得收藏哦~
上一篇
下一篇