数据结构之排序算法Java实现(7)—— 插入类排序之希尔排序算法
希尔(Shell)排序算法也是对直接插入排序算法的改进,将数据分成几组,然后分别进行直接插入算法,然后再合并。
升序排序:
/** * 希尔排序 * 升序排序 */ @Override public <T extends Comparable<? super T>> void sortByAsc(T[] data) { if(data.length <=1 || data == null){ return; } T temp; int j = 0; /**gap为步长*/ for(int gap = data.length/2; gap > 0; gap /= 2){ for(int i = gap; i < data.length; i++){ temp = data[i]; /**对每一个gap进行插入排序*/ for( j = i - gap; j >= 0; j -= gap){ if(temp.compareTo(data[j]) < 0){ data[j + gap] = data[j]; }else{ break; } } data[j + gap] = temp; } } }
降序排序:
/** * 希尔排序 * 降序排序 */ @Override public <T extends Comparable<? super T>> void sortByDesc(T[] data) { if(data.length <=1 || data == null){ return; } T temp; int j = 0; /**gap为步长*/ for(int gap = data.length/2; gap > 0; gap /= 2){ for(int i = gap; i < data.length; i++){ temp = data[i]; /**对每一个gap进行插入排序*/ for( j = i - gap; j >= 0; j -= gap){ if(temp.compareTo(data[j]) > 0){ data[j + gap] = data[j]; }else{ break; } } data[j + gap] = temp; } } }