__author__ = 'student' print 'hello world hello python' ''' heap sort root leftchild 2n+1 rightchild 2n+2 compare them and get the maxnode step by step think way one step write the perfect program is hard but it is easy to write your think step by step build max heap then swap the biggest number with the size heap sort is a tuning for selection sort. ''' la =[1,5,7,3,20,0,9,4] print ', '.join(str(x) for x in la) #from bottom to top def heap(la,root,heap_size=None): if heap_size is None: length=la.__len__() else: length=heap_size lc=root*2+1 rc=root*2+2 maxnode=root if length>lc and la[lc]>la[root]: maxnode=lc if length>rc and la[rc]>la[maxnode]: maxnode=rc if maxnode!=root: la[maxnode],la[root]=la[root],la[maxnode] heap(la,maxnode,heap_size) #build max heap def build_max_heap(la): root=la.__len__()/2-1 while root>=0: heap(la,root) root-=1 #heap sort #print ','.join (str(x) for x in xrange(la.__len__(),0,-1)) build_max_heap(la) def heap_sort(la): heap_size=la.__len__()-1 for i in xrange(heap_size,0,-1): la[i],la[0]=la[0],la[i] #swap heap(la,0,heap_size) heap_size-=1 print heap_size,la print la heap_sort(la) 感悟:
学算法千万不能背,不能去抄别人的代码。
首先要去理解整个逻辑,找一个小的数据集,自己推算出其过程,
然后根据这个过程来写代码。
否则抄别人的代码,被别人的思路牵着走,最后容易忘记,还得回头学。