排序思想:为解决普通插入排序中,一旦在靠后位置出现较小数时,需要进行多次比较的问题,引入
步长
的概念,利用步长对数组元素进行分组,对每个分组中的元素分别进行插入排序,这样可以时较小的数很快交换到靠前的位置,减少比较次数。时间复杂度:O(n^(1.3—2))
package dataStructure.sortTest;
import java.util.Arrays;
/**
* 希尔排序:利用“步长”的
* @author lyq
* @create 5/5/19
*/
public class HeerSort {
public static void main(String[] args) {
int[] arr = {9,1,8,3,6,0,7,2};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr){
//步长递减
for (int step = arr.length/2;step > 0;step /= 2) {
//步长为某值时遍历所有分组
for (int i = step;i < arr.length;i++) {
//分组中的元素遍历插入排序
for (int j = i - step;j >= 0 ;j -= step) {
if (arr[j] > arr[j+step]) {
int temp = arr[j];
arr[j] = arr[j+step];
arr[j+step] = temp;
}
}
}
}
}
}