希尔排序也是一种插入排序,是简单排序经过改版后更高效的排序,也叫缩小增量排序。
希尔排序是将一些数据分组,每组都使用直接插入排序算法进行排序,再将几组有序的元素一起进行下一轮的排序,最终达到全部排序。
以下为代码实现:
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] arr = {2,3,4,6,5,7,1,8,9,0};
System.out.println(Arrays.toString(Sso(arr)));
}
public static int[] Sso(int[] arr) {
int temp = 0;
for(int gap = arr.length / 2; gap > 0;gap /= 2) {
//设置了步长为gap = arr.length / 2,并且决定了每轮分几组和比较几轮
for(int i = gap;i < arr.length; i++) {
//遍历各组所有元素,共gap组,每组有arr.length/gap个元素,步长为gap
for(int j = i -gap; j >= 0; j -= gap) {
//将当前元素和当前元素加步长(gap)进行比较并决定是否交换
if(arr[j] > arr[j+gap]) {
temp = arr[j];
arr[j] = arr[j+gap];
arr[j+gap] = temp;
}
}
}
}
return arr;
}
}