__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) 感悟:
学算法千万不能背,不能去抄别人的代码。
首先要去理解整个逻辑,找一个小的数据集,自己推算出其过程,
然后根据这个过程来写代码。
否则抄别人的代码,被别人的思路牵着走,最后容易忘记,还得回头学。

Python HeapSort的更多相关文章

  1. 基本排序算法的Python实现

    本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序.希望大家回顾知识的时候也能从我的这篇文章得到帮助. 为了防止误导读者,本文所有概念性 ...

  2. Python学习路程day17

    常用算法与设计模式 选择排序 时间复杂度 二.计算方法 1.一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费 ...

  3. 八大排序算法的 Python 实现

    转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...

  4. 经典排序算法总结与实现 ---python

    原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...

  5. algorithm: heap sort in python 算法导论 堆排序

    An Python implementation of heap-sort based on the detailed algorithm description in Introduction to ...

  6. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  7. Heapsort 堆排序算法详解(Java实现)

    Heapsort (堆排序)是最经典的排序算法之一,在google或者百度中搜一下可以搜到很多非常详细的解析.同样好的排序算法还有quicksort(快速排序)和merge sort(归并排序),选择 ...

  8. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  9. 最小堆实现优先队列:Python实现

    最小堆实现优先队列:Python实现 堆是一种数据结构,因为Heapsort而被提出.除了堆排序,“堆”这种数据结构还可以用于优先队列的实现. 堆首先是一个完全二叉树:它除了最底层之外,树的每一层的都 ...

随机推荐

  1. Configuring a Windows Azure Project

    A Windows Azure project includes two configuration files: ServiceDefinition.csdef and ServiceConfigu ...

  2. Python基础:数值(布尔型、整型、长整型、浮点型、复数)

    一.概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool).整型(int).长整型(long).浮点型(float)和复数(complex). 数值类型支持的主要操 ...

  3. [moka同学笔记]百度编辑器Ueditor自动换行,添加<p>的问题(摘录)

     原文:http://www.cnblogs.com/kissdodog/p/5419919.html 百度编辑器Ueditor其实蛮好用的,后来使用了一段时间发现,每次打开后又保存,发现都会往内容的 ...

  4. ajax案例源码

    html文件中demo2_index.html ---------------------------------------------------------------------------- ...

  5. ahjesus linux连接阿里云ubuntu服务器并更改默认账号和密码,以及创建子账户

    先确保本地Linux服务器SSH服务开启,如果没有开启直接执行指令:service sshd start 然后我们使用ssh指令进行远程登陆 ssh username@ip-address 输入pas ...

  6. FPSCalc——简单FPS观测类

    利用Unity做的手游项目很多时候要保证流畅度,流畅度最直观的表现就是帧率FPS.Unity编辑器模式下的帧率观测几乎没有意义,所以还是自己实现的好. 这里给一个前人写的类,我几乎原封不动,该类只有一 ...

  7. Android笔记——什么是json?json如何使用?

    什么是json 什么是json,json是什么,json如何使用 JSON是JavaScript Object Notation的缩写,可见JSON来源于JavaScript.JSON数据是一系列键值 ...

  8. jquery对javascript事件的封装一览

    描述 jquery javascript 鼠标点击某个对象 click() onclick  鼠标双击某个对象 dblclick() ondblclick 元素获得焦点 focus() onfocus ...

  9. arcgis union 0x80040218

    我利用ArcGis中的union工具将两张图层叠加时,系统总是提示失败,这是什么原因?希望高手能够解决这个问题.图片是系统提示,表示看不懂哪里出错了? 你必须使用数据管理-要素-修复几何,源数据存在不 ...

  10. anriod TabHost

    package com.example.yanlei.mytk; import android.os.Bundle; import android.support.v7.app.AppCompatAc ...