Skynet

          ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks
          算法導論 - 算法入門 ,一小節(插入排序,復雜度)
          #  插入排序                -         復雜度
          def insertion_sort(arr):             # 1
              for j in xrange( 1,len(arr) ):   # n-1
                  key = arr[j]                 # n-1
                  i=j-1                        # n-1
                  while i>=and arr[i]> key : # n(n-1)/2
                      arr[i+1= arr[i]        # n(n-1)/2
                      i=i-1                    # n(n-1)/2
                  arr[i+1= key               # n-1
                  print arr                    # n-1

          驗證結果 :
          >>> arr=[5,2,4,6,1,3]
          >>> insertion_sort(arr)
          [2, 5, 4, 6, 1, 3]
          [2, 4, 5, 6, 1, 3]
          [2, 4, 5, 6, 1, 3]
          [1, 2, 4, 5, 6, 3]
          [1, 2, 3, 4, 5, 6]





          驗證復雜度:
          z = 5(n-1)+1+3n(n-1)/2
          我們測試數據 為  n=6 
          當數據極端情況就是需要全部重新排列
          就是 [6,5,4,3,2,1] 要排出 [1,2,3,4,5,6] 這樣
          >> z = 71

          一種比較笨的 驗證方法 供大家拍磚 :
          def insertion_sort(arr):         
              ii
          =0
              ii
          +=1
              
          for j in xrange( 1,len(arr) ):
                  ii
          +=1
                  
                  key 
          = arr[j]            
                  ii
          +=1
                  
                  i
          =j-1                
                  ii
          +=1
                  
                  
          while i>=and arr[i]> key :    
                      ii
          +=1
                      
                      arr[i
          +1= arr[i]    
                      ii
          +=1
                      
                      i
          =i-1            
                      ii
          +=1
                      
                  arr[i
          +1= key            
                  ii
          +=1
                  
                  
          print arr            
                  ii
          +=1

              
          print "----",str(ii)

          >>> arr=[6,5,4,3,2,1]
          >>> insertion_sort(arr)
          [5, 6, 4, 3, 2, 1]
          [4, 5, 6, 3, 2, 1]
          [3, 4, 5, 6, 2, 1]
          [2, 3, 4, 5, 6, 1]
          [1, 2, 3, 4, 5, 6]
          ---- 71  #復雜度驗證為 71


          羅嗦下 n(n-1)/2
          極端情況下 
          i=1 ; j 需要挪動 1次
          i=2 ; j 挪動 1+2次
          i=3 ; j 挪動 1+2+3次
          ....
          i=n ; j 挪動 1+2....+n

          我們又找到 (1+n)+(2+n-1)+(3+n-2).... = (1+n)n/2
          我們這 的 i 是從 2 次開始的 也就是說  (n-1)n/2 了
          def tn(ii):
              ti
          =0
              
          for i in xrange(ii) :
                  
          for j in xrange(i) :
                      ti
          +=1
              
          print ti


          print tn(2)  #1 = 1
          print tn(3)  #3 = 1+2
          print tn(4)  #6 = 1+2+3
          ..








          整理 www.aygfsteel.com/Good-Game
          posted on 2009-11-18 23:29 劉凱毅 閱讀(1672) 評論(0)  編輯  收藏 所屬分類: python算法/函數
          主站蜘蛛池模板: 德格县| 应城市| 家居| 泰和县| 龙陵县| 定远县| 思南县| 武鸣县| 沅江市| 广州市| 温州市| 拜泉县| 烟台市| 达拉特旗| 米林县| 巫山县| 九江市| 长海县| 常宁市| 苏尼特右旗| 宜黄县| 井研县| 庆城县| 乳山市| 镇坪县| 大宁县| 普兰店市| 剑阁县| 蒲江县| 贵州省| 双桥区| 久治县| 米林县| 三原县| 德昌县| 恩平市| 长春市| 罗城| 米林县| 龙里县| 廉江市|