希尔排序
内部也是使用了插入排序
- 将数组中的元素通过计算出的步长(增量)进行分组,每次分组步长为array.length/2
- 将自己组内的元素进行比较使用插入排序,大的在后面,小的在前面
- 然后再进行分组 在将上一次的步长/2
- 再进行自己组内的元素比较,重复上面1、2两步
- 直到步长为0
public class ShellSort {
public static void main(String[] args) {
int[] array = new int[]{3,1,8,34,93,1,35,34,7,9,6,5};
System.out.println(Arrays.toString(array));
shellSort(array);
System.out.println(Arrays.toString(array));
}
public static void shellSort(int[] array){
//根据步长进行分组
for(int d = array.length/2;d > 0;d = d / 2){
//遍历所有元素
for(int i = 0;i < array.length;i++){
//遍历组内元素
for(int j = i- d ;j >=0;j = j - d){
if(array[j]>array[j+d]){
int temp = array[j];
array[j] = array[j+d];
array[j+d] = temp;
}
}
}
}
}
}