希尔排序

原理

  • 是插入排序的改进
  • 按照设定步长把两个数交换位置
  • 步长逐步缩小
  • 最后步长设为1
  • 即为合并完成的排序数组

    代码实现

    ```javascript /**

    • @author laoduan
    • @create 2020-04-29-18:02 */ public class ShellSort { public static void main(String[] args) {

      1. int [] arr = {8,9,1,7,2,3,5,4,6,0};

      }

      public static void shellSort(int[] arr){

      1. int temp = 0;
      2. for (int gap = arr.length/2;gap>0;gap/=2){
      3. for(int i =gap;i<arr.length;i++){
      4. //循环各组中的所有元素(共gap组,每组gap/2个元素),不常gap
      5. for (int j=i-gap;j>=0;j-=gap){
      6. if(arr[j]>arr[j+gap]){
      7. temp = arr[j];
      8. arr[j]=arr[j+gap];
      9. arr[j+gap]=temp;
      10. }
      11. }
      12. }
      13. }

      }

  1. public static void shellSort2(int[]arr){
  2. for (int gap = arr.length/2;gap>0;gap/=2){
  3. for (int i = gap;i<arr.length;i++){
  4. int j = i;
  5. int temp = arr[j];
  6. if(arr[j]<arr[j-gap]){
  7. while (j-gap>=0 && temp<arr[j-gap]){
  8. arr[j]=arr[j-gap];
  9. j-=gap;
  10. }
  11. arr[j]=temp;
  12. }
  13. }
  14. }
  15. }

}

```