<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      算法學習:希爾排序(插入排序)

      1、插入排序有兩種,直接插入排序和希爾排序

      2、希爾排序核心思想

      希爾排序本質也是一種插入排序,但是是根據簡單插入排序進行優(yōu)化有的一種更加高效的版本,別稱是縮小增量排序。
      希爾排序的核心思想是將排序數組按照增量進行分組,然后對分組的元素進行直接插入排序,循環(huán)縮小分組增量,最后當增量長度為1是排序結束。

      3、舉例:給不同身高的人進行排序

      第一步:分組,找一個間隔分組,間隔取4。間隔通常是總長度的一半,奇數偶數均可。

      如圖所示:0,4,8一組;1,5一組,2,6一組;3,7一組。

      第二步:對于每組元素,分別進行排序

        第一組:0,4,8  已經排好序;

        第二組:5,1 

        第三組:6,2

        第四種:3,7

      所有組拍完序后,此時:

      第三步:繼續(xù)設置間隔,這次的間隔是上次的一半,間隔取2

        第一組:0,2,4,6,8

        第二組:1,3,5,7

      第四步:重復步驟二給每組排序:

        第一組:2,0,6,4,8

        第二組:3,7,1,5

      全部排完序后:

      第五步:再次設置間隔,間隔取上次的一半1

      當間隔為1時,使用插入排序法,進行排序

      最終結果:

      方法總結:對每個分組進行插入排序

       

      4、代碼

      對數組[83,29,30,5,99,34,12,66]使用希爾排序進行排序。

      # 代碼1

      def shellsort(arr):
          #設置步長
          gap = len(arr)
          while gap > 0:
              #遍歷分組
              for i in range(gap,len(arr)):
                  #對當前分組的元素進行插入排序
                  for j in range(i,gap-1,-gap):
                      if arr[j] < arr[j-gap]:
                          arr[j],arr[j-gap]=arr[j-gap],arr[j]
                      else:
                          break
              print(arr)
              gap //= 2# 步長減半
          return arr
      
      arr=[83,29,30,5,99,34,12,66]
      print("最終結果:",shellsort(arr))

      結果:

       

      #代碼2:分成直接插入排序+希爾排序思想

      def compare(arr,i,gap):
          #直接插入排序
          j = i-gap
          while j>=0:
              if arr[j]>arr[j+gap]:
                  arr[j+gap],arr[j]=arr[j],arr[j+gap]
                  j-=gap
              else:
                  break
      
      
      def shellSort(arr):
          gap=len(arr)//2
          while gap>=1:#步長大于0的時候,都要做以下步驟
              #1 分組
              #2 對分組的元素進行直接插入排序
              #3 縮小步長
              for i in range(gap):#對每組都要進行直接插入排序
                  for j in range(i,len(arr),gap):
                      compare(arr,j,gap)
              gap//=2  #一輪循環(huán)之后,才調整步長
          return arr
      
      arr=[7,3,45,23,-1,34,88,9,4]
      print(shellSort(arr))
      #結果[-1, 3, 4, 7, 9, 23, 34, 45, 88]

       

      5、希爾排序的時間復雜度

      希爾排序是按照不同步長對元素進行插入排序,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個素很少,速度很快;
      當元素基本有序了,步長很小,插入排序對于有序的序列效率很高。
      所以希爾排序的時間復雜度比O(n^2)要好一些。

       

       

       

       

       

       

       

       

       
       

      posted @ 2020-12-04 14:21  hqq的進階日記  閱讀(511)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 沭阳县| 亚洲精品中文字幕二区| 国产激情电影综合在线看| 亚洲综合伊人久久大杳蕉| 人人妻人人做人人爽夜欢视频| 最新亚洲av日韩av二区| 国产精品久久久久久久久久| 92自拍视频爽啪在线观看| 日本熟妇XXXX潮喷视频| 国产精品不卡区一区二| 欧美18videosex性欧美tube1080 | 午夜成人精品福利网站在线观看 | 日韩中文免费一区二区| 国产精品国产三级国快看| 成人午夜福利视频后入| 少妇撒尿一区二区在线视频| 91精品国产午夜福利| 亚洲精品麻豆一区二区| 国产福利片无码区在线观看| 毛片免费观看天天干天天爽| 国产精品人成视频免| 可以直接看的无码av| 乱老年女人伦免费视频| 国产va免费精品观看精品| 久久精品a亚洲国产v高清不卡| 亚洲人成人日韩中文字幕| 少妇宾馆粉嫩10p| 国产精品自拍自在线播放| 韩国免费a级毛片久久| 中文字幕制服国产精品| 国产精品亚洲一区二区在| 夜色福利站WWW国产在线视频| 国产麻豆精品手机在线观看| 九寨沟县| 亚洲熟妇自偷自拍另类| 亚洲国产成人va在线观看天堂| 国产日产欧产系列| 国产蜜臀在线一区二区三区| 亚洲精品无码久久久影院相关影片 | 蜜臀av一区二区三区在线| 亚洲中文无码av永久不收费|