定义交换函数:
private static void swap(int[] arr, int i, int j) {
if(i == j) return;
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
希尔排序:
插入排序变种。
不像插入排序,一个一个插,希尔排序有跳跃性。相隔一定增量插入排序,效率更高。
关键在于选定跳跃值,此处跳跃值选择原则是逐渐除2。
代码:
public void shellSort(int[] arr){
for(int h = arr.length/2; h >= 1; h/=2){
for(int i = h; i < arr.length; i++){
for(int j = i; j-h >= 0; j-=h){
if(arr[j-h] > arr[j]) swap(arr, j, j-h);
else break;
}
}
}
}