概念
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
代码实例
package com.wyb.sort;
import java.util.Arrays;
/**
* 类说明:希尔排序
*/
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[]{3, 5, 2, 7, 8, 1, 2, 0, 4, 7, 3, 4, 8};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shellSort(int[] arr) {
// 遍历所有的步长
for (int i = arr.length / 2; i > 0; i /= 2) {
// 遍历所有的元素
for (int j = i; j < arr.length; j++) {
// 遍历本组中所有的元素
for (int k = j - i; k >= 0; k -= i) {
// 如果当前元素大于加上步长后的那个元素就需要交换位置
if (arr[k] > arr[k + i]) {
int temp = arr[k];
arr[k] = arr[k + i];
arr[k + i] = temp;
}
}
}
}
}
}
稳定性分析
由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。