Shell排序严格来说是基于插入排序思想,其又称为希尔排序或缩小增量排序,在对大量数据需要进行排序时,是不错的选择。
实现过程
- 将n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为一对,第2个数据和第n/2+2个数据为一对。。。
- 一次循环使每一个序列对排好序
- 然后再变为n/4个序列,再次排序
- 不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序
在进行插入排序的时候,如果原数据是基本有序的,则排序效率就可大大提高。另外对于数量较少的的序列使用直接插入排序,因需要移动的数据量较少,其效率也较高,故Shell排序具有较高的执行效率
代码实现
/**
* shell排序(基于插入排序)
*/
public class ShellSort {
public static int[] arr = {7,2,1,4,6,3,8,5};
public static void main(String[] args) {
for (int i= arr.length/2;i>=1;i/=2){
for (int j=i;j<arr.length;j++){
int temp = arr[j];
int k = j-i;
while (k>=0 && temp<arr[k]){
arr[k+i]=arr[k];
k-=i;
}
arr[k+i] = temp;
for(int a:arr){
System.out.print(a+",");
}
System.out.println();
}
}
for(int a:arr){
System.out.println(a);
}
}
}