zoukankan      html  css  js  c++  java
  • 排序算法——希尔排序

    • 排序逻辑

      希尔排序是在插入排序的优化,插入排序当一个小的数在右边的时候,以为插入排序只能交换相邻的数据,则需要很多次交换操作才能将前面序列保持有序,故希尔排序加入交换步长,能够交换相隔很远的数据,先队列排至大致有序,极大的提高了插入排序的效率

      图示

      • 交换排序

      • 希尔排序

      • 初始队列

      • 步长为2

        如果是直接插入排序,则此处需要交换两次

      • 步长为1

        就是普通的插入排序了

    • 代码示例

      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>=d;j-=d){
                      if(arr[j]>arr[j+d]){
                          int temp = arr[j];
                          arr[j] = arr[j+d];
                          arr[j+d] = temp;
                      }
                  }
              }
          }
      }
      
    • 时间复杂度

      O(nlogn)

  • 相关阅读:
    EVM靶机渗透
    Joomla漏洞复现
    渗透测试
    Kali软件库认识
    谷歌hack语法
    Metasploit学习
    sqli-labs less-17
    sqli-labs(less-11-16)
    sqli-labs (less-8-less-10)
    less-7
  • 原文地址:https://www.cnblogs.com/angle-yan/p/13348059.html
Copyright © 2011-2022 走看看