python实现堆排序的三种方式

# -*- coding: utf-8 -*-
"""
Created on Fri May 16 14:57:50 2014

@author: lifeix
"""
import heapq
#堆排序
#第一种实现
def Heapify(a, start, end):
    left = 0
    right = 0
    maxv = 0
    left = start * 2
    right = start * 2 + 1
    while left <= end:
        maxv = left
        if right <= end:
            if a[left] < a[right]:
                maxv = right
            else:
                maxv = left
        if a[start] < a[maxv]:
            a[maxv],a[start] = a[start],a[maxv]
            start = maxv
        else:
            break
        left = start * 2
        right = start * 2 + 1

def BuildHeap(a):
    size = len(a)
    i = (size -1) // 2;
    while i >= 0:
        Heapify(a, i, size - 1)
        i = i - 1

def HeapSort(a):
    BuildHeap(a)
    print ‘first before sorted:‘, a
    i = len(a) - 1

    while i >= 0:
        a[0],a[i] = a[i],a[0]
        Heapify(a, 0, i - 1)
        i = i - 1

a = [4,1,3,2,16,9,10,14,8,7]
HeapSort(a)
print ‘first after sorted‘,a

#第二种实现
def buildHeap(a,size):
    for j in range(size/2 - 1, -1,-1):
        adjustHeap(a,j,size)

def adjustHeap(a, i, size):
    lchild = 2*i  #i的左孩子节点序号
    rchild = 2*i + 1 #i的右孩子节点序号
    maxIndex = i
    if i < size/2:
        if lchild <= size and a[lchild] > a[maxIndex]:
            maxIndex = lchild
        if rchild <= size and a[rchild] > a[maxIndex]:
            maxIndex = rchild
        if maxIndex != i:
            a[i],a[maxIndex] = a[maxIndex], a[i]
            adjustHeap(a, maxIndex,size)

if __name__ == "__main__":
   a =[4,1,3,2,16,9,10,14,8,7]
   b =[4,1,3,2,16,9,10,14,8,7]
   buildHeap(a, len(a))
   print ‘-------------------------------------------------‘
   print ‘second before sorted‘,a
   i = len(a) - 1
   while i >= 0:
       a[0],a[i] = a[i],a[0]
       buildHeap(a,i)
       i = i - 1
   print ‘second after sorted‘,a

   #python自带函数实现
   heapq.heapify(b)
   heap = []
   while b:
        heap.append(heapq.heappop(b))
   b[:] = heap
   print ‘-------------------------------------------------‘
   print ‘sdk sorted‘,b
        

python实现堆排序的三种方式,布布扣,bubuko.com

时间: 2024-08-25 21:20:45

python实现堆排序的三种方式的相关文章

python实现单例模式的三种方式及相关知识解释

python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singleton实现的四种方法都是python的重要特征,反过来也刚好是几种特征的最佳实现.(比如你平常开发中很难遇到几个需要写元类的地方)如果不能随手写出某种实现,说明你对于那种实现的概念还没有完全掌握.最近场通过写装饰器模式的singleton来复习装饰器概念. 1. module实现 #模块实现 from

Python输出内容的三种方式:print输出 python脚本执行 linux直接执行

1.  在linux中安装python后,在linux命令行中输入python即可切换到Python命令行下 2.  print ‘hello world!’ == print (“hello world!”) 3.编写一个Python脚本,然后在执行 比如:在文本中输入:print 'hello word!' 然后把此文件保存为py文件,比如:h.py 在linux环境下,先把路径切换到文件存放的路径,然后再执行 4.把Python程序改成可执行文件(文件名:h.py),可直接执行: 文件内容

命令行运行Python脚本时传入参数的三种方式

三种常用的方式如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10python script.py -gpus=0,1,2 --batch-size=10python script.py -gpus=0,1,2 --batch_size=10123这三种格式对应不同的参数解析方式,分别为sys.argv, argparse, tf.app.run, 前两者是python自带的功能,后者是ten

python 中增加css样式的三种方式

增加css样式的三种方式: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <!--head中style是第一处写css样式的地方--> 7 <style> 8 .cl{ 9 /*背景色*/ 10 background-color

Python Django 多对多三种创建方式 form组件 cookie和session

一 表中多对多关系三种创建方式 以Book表和Author表多对多关系例 1.第一种方式:全自动(推荐使用):models.ManyToManyField(to='类名') 优点:不需要你手动创建第三张表 缺点:第三张表不是你手动创建的,字段是固定的无法拓展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_place

【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测试配置]) Mysql源码包 (必须选择与你已安装mysql的版本一致) 为了避免安装中出现依赖包缺失,你需要打一句鸡血: yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel exp

(六)、获取Keystone token的三种方式

让我们粗略看一下,三种从Keystone获得token的方式.在尝试这三种方式之前,你得确保已经装好Keystone终端.如果还没有装好,可以看grizzly安装版本的Keystone 安装部分. Note:这些呼叫都将请求的是Keystone v2版本. 假定你已经安装好,并且Keystone已经跑起来了:).然后接下来我们首先要做的便是,发一个简单的cURL发送请求: $ curl -d '{"auth": {"tenantName": "demo&q

数据导入HBase最常用的三种方式及实践分析

数据导入HBase最常用的三种方式及实践分析         摘要:要使用Hadoop,需要将现有的各种类型的数据库或数据文件中的数据导入HBase.一般而言,有三种常见方式:使用HBase的API中的Put方法,使用HBase 的bulk load工具和使用定制的MapReduce Job方式.本文均有详细描述. [编者按]要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用H

python字符串连接的N种方式

python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 str2 % 连接字符串:‘name:%s; sex: ’ % ('tom', 'male') 字符串列表连接:str.join(some_list) 第一种,想必只要是有编程经验的人,估计都知道,直接用 “+” 来连接两个字符串: 'Jim' + 'Green' = 'JimGreen' 第二种比较特