3.5排序算法之希尔排序(属于插入排序)

数据结构与算法【基础版】:3.5排序算法之希尔排序(属于插入排序)_java

思路:

第一轮

1.先用数组长度/2等于一个值,该值就是区间的步长(做为比较)

  • 9 / 2 = 4

2.让每个部分都做一个插入排序

  • 第一部分的比较:

  • 后续部分一样,都做一次插入排序

第二轮

1.在将除过的值/2等于一个值,该值就是区间的步长(做为比较)

  • 4 / 2 = 2

2.让每个部分都做一个插入排序

  • 第一部分的比较:
  • 第二部分的比较:

第三轮

1.在将除过的值/2等于一个值,该值就是区间的步长(做为比较)

  • 2 / 2 = 1

2.让每个部分都做一个插入排序
最后就可以得出结果了!

代码:
package main.java.com.LiKou.arithmetic;

import java.util.Arrays;

/**
* 希尔排序:
* 比直接插入排序的效率高
*/
public class ShellSort {

public static void main(String[] args) {
int[] arr = new int[]{3, 7, 8, 2, 1, 4, 6, 9, 0};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}

public static void shellSort(int[] arr){ //希尔排序
//遍历所有的步长
for(int d = arr.length / 2; d > 0; d /= 2){
//遍历所有的元素
for(int i = d; i < arr.length; i++){
//遍历本组中所有的元素
for(int j = i - d; j >= 0; j -= d){
//如果当前元素大于加上步长后的元素
if(arr[j] > arr[j + d]){
int temp = arr[j];
arr[j] = arr[j + d];
arr[j + d] = temp;
}
}
}
}
}
}