[Python] Heap Sort in Python

代码:

#! /usr/bin/env python
#coding=utf-8

import random,copy

def heap_sort_helper(lst,left,right):
    # max heapify
    current_value = lst[left]
    child = 2 * left + 1
    while (child <= right):
        if (child < right and lst[child] < lst[child+1]):
            child  = child + 1
        if (current_value > lst[child]):
            break
        else:
            lst[(child-1)>>1] = lst[child]
            child = 2 * child + 1
    lst[(child-1)>>1] = current_value

def heap_sort(lst):
    # build heap
    for i in range((len(lst)-1)>>1,-1,-1):
        heap_sort_helper(lst,i,len(lst)-1)
    for i in range(len(lst)-1,0,-1):
        lst[i],lst[0] = lst[0],lst[i]
        heap_sort_helper(lst,0,i-1)

if  __name__ == "__main__":
    lst = [random.randint(0,20) for i in range(10)]
    lst2 = copy.deepcopy(lst)
    lst2.sort()
    print(lst)
    print(lst2)
    heap_sort(lst)
    print(lst)

测试数据:

[18, 3, 1, 20, 7, 5, 4, 10, 16, 6]
[1, 3, 4, 5, 6, 7, 10, 16, 18, 20]
[1, 3, 4, 5, 6, 7, 10, 16, 18, 20]

时间: 2024-10-12 15:46:01

[Python] Heap Sort in Python的相关文章

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

An Python implementation of heap-sort based on the detailed algorithm description in Introduction to Algorithms Third Edition import random def max_heapify(arr, i, length): while True: l, r = i * 2 + 1, i * 2 + 2 largest = l if l < length and arr[l]

排序算法:heap sort(含heap介绍,python)

heap介绍 binary heap可以被看成是一种接近完成的binary tree.可以分为max-heap和min-heap,max-heap的parent要比children大,min-heap相反. 通常用array A构成的heap中,有两个基本的特性:1. A.length,给出了阵列中的元素个数.2. A.heap-size,给出阵列中在heap中的元素. 这两者的区别是,A.heap-size中的才是在heap里的,A.length的长度可能还包含了其他的很多元素. 这个可以在之

[leetcode]Sort List @ Python

原题地址:http://oj.leetcode.com/problems/sort-list/ 题意:链表的排序.要求:时间复杂度O(nlogn),空间复杂度O(1). 解题思路:由于题目对时间复杂度和空间复杂度要求比较高,所以查看了各种解法,最好的解法就是归并排序,由于链表在归并操作时并不需要像数组的归并操作那样分配一个临时数组空间,所以这样就是常数空间复杂度了,当然这里不考虑递归所产生的系统调用的栈.   这里涉及到一个链表常用的操作,即快慢指针的技巧.设置slow和fast指针,开始它们都

[leetcode]Insertion Sort List @ Python

原题地址:http://oj.leetcode.com/problems/insertion-sort-list/ 题意:对链表进行插入排序. 解题思路:首先来对插入排序有一个直观的认识,来自维基百科. 代码循环部分图示: 代码: class Solution: # @param head, a ListNode # @return a ListNode def insertionSortList(self, head): if not head: return head dummy = Lis

[leetcode]Sort Colors @ Python

原题地址:https://oj.leetcode.com/problems/sort-colors/ 题意: Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integer

关于python中sort排序的一个简单问题:

最近有小伙伴私聊问了一些类似的问题,就是关于python的sort排序的问题: a = [1, 0, 4, 0, 2, 3] a.sort(key=bool) print(a) 输出结果: [0, 0, 1, 4, 2, 3] 就是对这个排序的有点不太理解,为什么是[0, 0, 1, 4, 2, 3],不应该按升序来的吗?之所以产生这个误区,是因为对这个sort理解还不够,我之前也写过一篇关于sort排序的实现,里面简单的阐述原理,并且也实现了demo.我们再来回到这个问题上:a.sort(ke

Supporting Python 3(支持Python 3)——目录

Supporting Python 3(支持Python 3) 关于本书 关于术语 序 欢迎来到Python 3 是时候了吗? 如果我现在不能切换会怎么样? Python 和它的版本 更多资源 迁移策略 仅支持Python 3 Python 2和Python 3的单独分支 使用2to3转换到Python 3 使用Distribute来支持2to3转换 无需转换支持Python 2 和 Python 3 使用3to2 哪种策略适合你? 应用 Python模块和包 框架 结论 Preparing f

Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memcached安装和基本使用 Memcached安装: ? 1 2 3 4 5 6 7 8 wget http://me

【Python基础 09】Python高级变量类型

目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) 真 True 非 0 数 -- 非零即真 假 False 0 复数型 (complex) 主要用于科学计算,例如:平面场问题.波动问题.电感电容等问题 非数字型 字符串 列表 元组 字典 在 Python 中,所有 非数字型变量 都支持以下特点: 都是一个 序列 sequence,也可以理解为 容器 取值 []