希尔排序(Shell’s Sort)是插入排序的一种又称"缩小增量排序"(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。
希尔排序是非稳定排序算法
先定义一个 int 类型的 数组 arr
int[] arr = new int[]{9,8,7,6,5,4,3,2,1};
第一次增量
int step = arr.length/2;
循环判断并交换
//判断步长是否大于等于1,当步长等于1时,进行最后一次排序
while(step >= 1){
for (int i = 0; i < arr.length; i++) {
//如果 j 大于数组减去步长的数值,会越界
for (int j = i; j < arr.length - step; j = j + step) {
//判断每一个子组的大小
if (arr[i] > arr[j + step]){
//交换元素代码
int temp = arr[j + step];
arr[j + step] = arr[i];
arr[i] = temp;
}
}
}
}
循环完后要改变步长
step = step/2;
遍历数组
for (int i : arr) {
System.out.print(i + "\t");
}
结果
1 2 3 4 5 6 7 8 9
源代码
public static void main(String[] args) {
int[] arr = new int[]{9,8,7,6,5,4,3,2,1};
int step = arr.length/2;
while(step >= 1){
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length - step; j = j + step) {
if (arr[i] > arr[j + step]){
int temp = arr[j + step];
arr[j + step] = arr[i];
arr[i] = temp;
}
}
}
step = step/2;
}
for (int i : arr) {
System.out.print(i + "\t");
}
}