希尔排序
希尔排序的基本思路
在看希尔排序之前建议先看一下简单插入排序
1.我们先设置一个增量gap=length/2
2.将数组从0开始与0+length/2 两两组成一组,这个时候分成了length/2组。
3.将每组中的两个按顺序排序
4.将gap = gap/2,这个时候将数组分成gap/2组,即0,0+gap,0+gap+gap,直到后面没有。
5.然后将每组顺序排列好(一般用简单插入排序)
6.不断的将增量减少,直至增量为0;
代码
public class XiEr {
static void xier(int[] arr,int gap) {
gap = gap/2;
if(gap>0){
for(int i = 0;i < gap; i++) {
for(int j = gap+i ; j <= arr.length-1;j+=gap ){
for(int k = j - gap ; k >=0 ; k -= gap){
if(arr[j]<arr[k]){
int mid = arr[j];
arr[j] = arr[k];
arr[k] = mid;
}
}
}
}
xier(arr,gap);
}
}
public static void main(String[] args){
int[] arr = {1,6,7,8,9,10,4,3,2,5,};
xier(arr, arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}