Skynet

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

          # 快排 和 分治 很像 都是分而治之 ,但他們卻是 相反的 方式排序 :
          分治 是想拆分完成后,合并以有序的小段進行 排序 ,而快排是直接由原始的“拆分”來排序


          #encoding=utf-8
          #
          從 大 到 小
          def partition(A,p,r):
              tmp
          =A[p]
              
          while True :
                  
          while p+1<and A[p] > tmp : p+=1
                  
          while r-1>and A[r] <= tmp : r-=1    
              
          if A[p]<=A[r]: A[p],A[r]=A[r],A[p]
              
          if r-1<=p : return p


          def quickSort(A,p,r):
              
          if p<r:
                  q
          =partition(A,p,r)
                  quickSort(A,p,q)
                  quickSort(A,q
          +1,r)

          A
          =[9,61,7,14,-1,7,667,3,6,8]
          print A
          quickSort(A,0,len(A)
          -1)
          print A
          # 結果
          [667, 61, 14, 9, 8, 7, 7, 6, 3, -1]



          圖解:
          一次迭代過程描述 (從小到大):
          1. 以 A[0] 為切分點 用臨時變量 記錄 這里是 切分點 = [5]
          2. 分別起 2枚指針 [切分起左,右]
          3. 分別向中間 靠攏 , 當左指針指向值大于 切分點 停止 左 , 右指針指向值 小于 切分點 停止 右 。
          4. 判斷 是否是  停止點 上 左值 小于 右值 是:交換兩指針值 !

          第一次迭代后 : 
            以初始分隔 [5]  就已經切分好了 小于 5 的左 ,大于等于5 的右




          整理 www.aygfsteel.com/Good-Game
          posted on 2009-12-03 17:11 劉凱毅 閱讀(1686) 評論(0)  編輯  收藏 所屬分類: python算法/函數
          主站蜘蛛池模板: 白银市| 屯门区| 南皮县| 广德县| 定结县| 建始县| 门源| 仪陇县| 营山县| 五大连池市| 天峻县| 安新县| 沿河| 河曲县| 阿尔山市| 呈贡县| 五寨县| 敦化市| 弥勒县| 连云港市| 鄂托克旗| 安岳县| 西华县| 博客| 中方县| 临沧市| 平山县| 石棉县| 香格里拉县| 曲松县| 天柱县| 德化县| 晋宁县| 翁源县| 龙陵县| 兴海县| 子洲县| 石首市| 龙江县| 长岭县| 东辽县|