希尔(Shell)排序算法也是对直接插入排序算法的改进,将数据分成几组,然后分别进行直接插入算法,然后再合并。
升序排序:
/**
* 希尔排序
* 升序排序
*/
@Override
public > 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 > 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;
}
}
}