public static void main(String[] args) {
int num3[]= {1,223,44,32,3,23,3,3,22};
sort3(num3);
System.out.println(Arrays.toString(num3));
}
//希尔排序算法
public static int[] sort3(int[] num) {
int gap=num.length;
while(gap>0) {
for(int i=gap;i<num.length;i++) {
int j=i;
while(j-gap>=0 && num[j]<num[j-gap]) {
swap(num,j,j-gap);
j-=gap;
}
}
gap=(int)gap/2;
}
return num;
}
public static void swap(int[] arr,int a,int b) {
arr[a]^=arr[b];
arr[b]^=arr[a];
arr[a]^=arr[b];
}
希尔排序中插入排序要点:对各个组进行插入排序的时候,并不是先对一个组进行插入排序完再对其他组插入排序,而是轮流对每一个组进行插入排序。
另一种插入排序:
public static int[] sort3(int[] num) {
int gap=num.length;
while(gap>0) {
for(int i=gap;i<num.length;i++) {
int tmp=num[i];
int j=i-gap;
while(j>=0 && tmp<num[j]) {
num[j+gap]=num[j];
j-=gap;
}
num[j+gap]=tmp;
}
gap=(int)gap/2;
}
return num;
}