希尔排序
简单的说,希尔排序就是将数组按照步长d来划分为k组,对每组内的数字进行一次插入排序,排完序列之后,再将d/2,直到d不能再除2
时间复杂度: O(n2)
空间复杂度: O(1)
排序方式:in-place
稳定性 不稳定
package SortAlgorithm; /**
* @author: xingt mym_74@163.com
* @date: 2019/10/22, 15:11
* @version: 1.0
*/
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[]{2,4,5,6,6,76,2,3,5,23,5,1,5};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
/**
*
* @param arr 数组
*/
private static void shellSort(int[] arr){
//遍历所有的步长 ,初始的步长为数组长度/2 , 后面每次都除以2
for(int d = arr.length/2; d>0;d/=2){
//遍历所有元素
// i=d 是为了之后 j=i-d做分组的
for(int i=d; i< arr.length; i++){
//遍历本组所有的元素
// j-=d 是本组内的步长为d,只比较本组的数字
for(int j=i-d;j>=0;j-=d ){
// 如果当前元素大于加上d之后的元素,就需要交换元素了
if(arr[j]> arr[j+d]){
int temp = arr[j];
arr[j] = arr[j+d];
arr[j+d] = temp;
}
}
}
}
}
}