希尔排序
希尔排序是插入排序的一种,又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
稳定性
由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
代码实现
import java.util.Scanner;
public class shellSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] a = {2,3,5,1,23,6,78,34};
int[] b = sort(a);
for(int c : b){
System.out.print(c + " ");
}
}
// 希尔排序
public static int[] sort(int[] a){
int h = 1;
int temp = 0;
while (h < a.length / 2){
h = 2 * h + 1;
}
while (h >= 1){
for (int i = h; i < a.length; i++) {
for (int j = i; j >= h; j -= h) {
if(a[j] < a[j - h]){
temp = a[j];
a[j] = a[j - h];
a[j - h] = temp;
}
}
}
h = h / 2;
}
return a;
}
}