希尔排序
排序原理
希尔排序又称缩小增量排序
基本思想:先将原表按增量 ht分组,每个子文件按照直接插入法排序。同样,用下一个增量ht/2将文件再分为子文件,再直接插入法排序。直到ht=1时整个文件排好序
关键:选择合适的增量
希尔排序算法可以通过三重循环来实现
package sort;
import java.util.Arrays;
//希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序
public class ShellSort {
public static void main(String[] args) {
int[] arr = new int[] {5,4,2,7,9,-1,8,2};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shellSort(int[] arr) {
// 设置增量h,并逐步缩小增量
for (int h = arr.length / 2; h > 0; h /= 2) {
// 从第h个元素,逐个对其所在组进行直接插入排序操作
for (int i = h; i < arr.length; i++) {
for(int j=i;j>h-1;j-=h){
if(arr[j] < arr[j-h]){
swap(arr,j,j-1);
}
}
}
}
}
//交换数组元素
private static void swap(int[] arr,int a,int b){
arr[a] = arr[a] + arr[b];
arr[b] = arr[a] - arr[b];
arr[a] = arr[a] - arr[b];
}
}