您的位置:首页 > 其它

算法 2.1节 希尔排序、选择与插入排序的区别、排序的稳定性

2018-01-09 02:24 351 查看
希尔排序

public class ShellSort {
public static void sort(Comparable[] a) {
int n = a.length;

int h = 1;
while (h < n / 3) h = 3 * h + 1;

while (h >= 1) {
for (int i = h; i < n; i++) {
for (int j = i; j >= h && less(a[j], a[j - h]); j -= h) {
exch(a, j, j - h);
}
}
assert isHsorted(a, h);
h /= 3;
}
assert isSorted(a);
}

private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}

private static void exch(Object[] a, int i, int j) {
Object swap = a[i];
a[i] = a[j];
a[j] = swap;
}

private static boolean isSorted(Comparable[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i-1])) return false;
return true;
}

private static boolean isHsorted(Comparable[] a, int h) {
for (int i = h; i < a.length; i++)
if (less(a[i], a[i-h])) return false;
return true;
}
}


选择与插入排序的区别



插入排序在输入本身已经基本排序好时,速度非常快

排序的稳定性

A stable sort preserves the relative order of items with equal keys.

In a stable sort, equal items never move past each other.

插入排序和归并排序时稳定的,选择排序和希尔排序是不稳定的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐