# -*- coding: utf-8 -*- #--------------------------------------- # ç¨åºï¼å æåº # çæ¬ï¼ # ä½è ï¼WuChong # æ¥æï¼2014-02-09 # è¯è¨ï¼Python 3.3 # 说æï¼ #--------------------------------------- def heap_sort(ary) : n = len(ary) first = int(n/2-1) #æåä¸ä¸ªéå¶åèç¹ for start in range(first,-1,-1) : #æé å¤§æ ¹å max_heapify(ary,start,n-1) for end in range(n-1,0,-1): #å æï¼å°å¤§æ ¹å è½¬æ¢ææåºæ°ç» ary[end],ary[0] = ary[0],ary[end] max_heapify(ary,0,end-1) return ary #æå¤§å è°æ´ï¼å°å çæ«ç«¯åèç¹ä½è°æ´ï¼ä½¿å¾åèç¹æ°¸è¿å°äºç¶èç¹ #start为å½åéè¦è°æ´æå¤§å çä½ç½®ï¼endä¸ºè°æ´è¾¹ç def max_heapify(ary,start,end): root = start while True : child = root*2 +1 #è°æ´èç¹çåèç¹ if child > end : break if child+1 <= end and ary[child] < ary[child+1] : child = child+1 #åè¾å¤§çåèç¹ if ary[root] < ary[child] : #è¾å¤§çåèç¹æä¸ºç¶èç¹ ary[root],ary[child] = ary[child],ary[root] #äº¤æ¢ root = child else : break