Shell Sort

来源:互联网 发布:淘宝金牌淘拍档 编辑:程序博客网 时间:2024/06/05 05:11

Shell sort是对插入排序的扩展,但是比插入排序速度快很多。

做了一个有趣的对比试验,比较shell sort和merge sort。

先把需要排序的数组分为大(>1M),中(1K<1M),小(< 1K),惊奇的发现,shell sort 在小数组比merge sort快,在中数组速度表现相类似,然而在大数组上比merge差了些。

假如我们的所要排序的数组相对不是特别大,shell sort是个不错的选择。

另外,shell sort不需要额外分配空间(merge需要分配额外空间)。

一下是shell sort 的Java 实现。


public static void shellSort(int[] arr) {int n = arr.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 && arr[j] < arr[j - h]; j -= h) {swap(arr, j, j - h);}}h /= 3;}}private static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}


0 0