public class ShellSort {
public static void main(String[] args) {
int[] a = {4,3,76,2,6,7,9,2,5,21};
System.out.println(Arrays.toString(a));
sort(a);
System.out.println(Arrays.toString(a));
}
/*
思路: 希尔排序通过将数组分成多个小段来进行排序,
因此它比插入排序更高效。希尔排序的基本思想是:
对待排序的数组进行分组,以一定的间隔(称为增量)
来对每个分组进行插入排序,随着增量的逐渐缩小,
每个分组包含的元素越来越多,当增量为1时,整个数组被分成一个组
- 三层循环
- gap循环从a.length/2开始,修改: gap/=2,执行条件>=1
- gap循环内是插入排序算法
- i循环从gap开始递增,执行条件:i<a.length
- i位置值另存到tmp
- j循环从i开始,修改:j-=gap,执行条件:j>=gap
- j-gap位置值如果大于tmp,j-gap位置值复制到j位置
- 否则,break
- tmp复制到j位置
*/
private static void sort(int[] a) {
for (int gap = a.length/2; gap >= 1 ; gap/=2) {
//插入排序
for (int i = gap; i < a.length; i++) {
int tmp = a[i];
int j;
for (j = i; j >= gap; j-=gap) {
if (a[j - gap] > tmp) {
a[j] = a[j - gap];
} else {
break;
}
}
a[j] = tmp;
}
}
}
}
排序算法-希尔排序
最新推荐文章于 2024-07-25 06:53:26 发布