• 希尔排序


    希尔排序(它是第一个时间复杂度冲破o(n^2)的)
      它是以插入排序为基础建立的,
      它的工作原理为:使用增量对序列进行分组进行插入排序,希尔建议的增量(希尔增量):{n/2,(n/2)/2......1},但不是最优的
      比如一个序列的长度为10,也就是一开始分为5组,然后2组,直到分为1组时.
      它的时间复杂度无论什么时候都为o(nlog2n)

    package sort;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author wyc
     * 希尔排序
     * 此希尔排序是为了熟悉数组的操作,所以增加了数组的拆分和合并操作以及class反射调用私有方法
     * 优化的希尔排序是可以在当前数组进行插入排序,参考原插入排序,控制希尔变量即可
     * 它的时间复杂度最优为o(nlog2n),这个不稳定,得参考希尔增量
     */
    @SuppressWarnings("unused")
    public class ShellSort {
        public static void main(String[] args) throws Exception {
            int[] arrays = {1,11,12,4,2,6,9,0,3,7,8,2};
            /*System.out.println("main方法的地址:"+arrays.toString());*/
            sort(arrays,2);                //传入要排序的数组以及希尔增量
            for(int value : arrays){
                System.out.print(value+",");
                
            }
            System.out.print("           "+arrays.length);
        }

      public static void sort(int []arr,int n){
        //增量gap,并逐步缩小增量
        for(int gap=arr.length/n;gap>0;gap/=n){
          //从第gap个元素,逐个对其所在组进行直接插入排序操作如果gap为3,则分组为(0,3,6,9)(1,4,7,10)(2,5,8,11)
          for(int i= gap;i<arr.length;i++){
            int j = i;
            while(j-gap>=0 && arr[j]<arr[j-gap]){   //对其所在组进行插入排序  
              //插入排序采用交换法
              swap(arr,j,j-gap);
              j-=gap;
            }
          }
        }
      }

    private static void swap(int[] arrays,int index,int index1){
            arrays[index] = arrays[index] + arrays[index1];
            arrays[index1] = arrays[index] - arrays[index1];
            arrays[index] = arrays[index] - arrays[index1];
        }
    }
  • 相关阅读:
    20201206贪心法1总结
    20201105枚举课后总结
    【题解】P1057 传球游戏
    人生哲理100句整理
    [计蒜客]棋子等级 题解
    整式的乘法相关公式(随着后续学习持续更新)
    计算几何公式(随着后续学习持续更新)
    mybatis中foreach在不同场景下的使用整理
    Java导出Excel文件详解
    java单元测试
  • 原文地址:https://www.cnblogs.com/nyhhd/p/12605759.html
Copyright © 2020-2023  润新知