堆排序(python)

堆排序算法

先看第一个函数HeapAdjust,这个函数功能是在已经是构成堆的二叉树上,如果节点k数据变化了,对节点k进行修正,使之成为一个新的堆二叉树,n为数据长度。

def HeapAdjust(lst,k,n):
    while(2*k+1<n):
        j=2*k+1
        if j+1<n and lst[j]>lst[j+1]:
            j=j+1
        if lst[j]<lst[k]:
            temp=lst[k]
            lst[k]=lst[j]
            lst[j]=temp
            k=j
        else:
            break
    return lst
HeapSort函数,利用上面的第一个函数构建堆二叉树,并利用上面的函数进行排序
def HeapSort(lst):
    n=len(lst)
    for i in range(int(n/2)-1,-1,-1):
        lst=HeapAdjust(lst,i,n)
    print(lst)
    for i in range(n-1,0,-1):
        temp=lst[0]
        lst[0]=lst[i]
        lst[i]=temp
        lst=HeapAdjust(lst,0,i)
    return lst

测试函数

a=[1,5,2,8,3,4,6,9,7]
print(a)
result=HeapSort(a)
print(result)
时间: 2024-10-11 13:16:33

堆排序(python)的相关文章

快速排序,归并排序,堆排序python实现

快速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是稳定的排序 堆排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是不稳定的排序 1.快速排序 快速排序的介绍以及C语言实现在这里:快速排序C语言实现 本文介绍的是快速排序python实现: de

堆排序python实现

3.堆排序 堆是一种完全二叉树(是除了最后一层,其它每一层都被完全填充,保持所有节点都向左对齐),首先需要知道概念:最大堆问题,最大堆就是根节点比子节点值都大,并且所有根节点都满足,那么称它为最大堆.反之最小堆. 当已有最大堆,如下图,首先将7提出,然后将堆中最后一个元素放到顶点上,此时这个堆不满足最大堆了,那么我们要给它构建成最大堆,需要找到此时堆中对打元素然后交换,此时最大值为6,符合最大堆后,我们将6提取出来,然后将堆中最后一个元素放到堆的顶部...以此类推.最后提取的数值7,6,5,4,

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:

你需要知道的九大排序算法【Python实现】之堆排序

六.堆排序 ?堆排序是一种树形选择排序,是对直接选择排序的有效改进. ?堆的定义下:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n/2)时称之为堆.在这里只讨论满足前者条件的堆.由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆).完全二 叉树可以很直观地表示堆的结构.堆顶为根,其它为左子树.右子树. ?基本思想:初始时把要排序的数的序列看作是一棵顺序存储

python中的堆排序peapq模块

heapq模块实现了python中的堆排序,并提供了有关方法.让用Python实现排序算法有了简单快捷的方式. heapq的官方文档和源码:8.4.heapq-Heap queue algorithm 下面通过举例的方式说明heapq的应用方法 实现堆排序 #! /usr/bin/evn python #coding:utf-8 from heapq import * def heapsort(iterable): h = [] for value in iterable: heappush(h

堆排序(Python实现)

堆排序(Heap Sort) 堆是一棵具有以下性质的完全二叉树: 大顶堆:每个结点的值都大于或等于其左右孩子结点的值 小顶堆:每个结点的值都小于或等于其左右孩子结点的值 堆排序的主要思想: 将待排序列构造成一个大顶堆,此时堆顶元素就是整个序列的最大值,将堆顶元素与堆数组的末尾元素进行交换.然后将剩余的n-1个元素重新构造成一个堆,并得到整个序列的次大值.如此反复执行,得到一个有序的序列. 复杂度分析 时间复杂度:最好.最坏.平均都是O(nlogn) 空间复杂度:O(1) 不稳定 不适合待排序列个

Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这

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]

[硕.Love Python] HeapSort(堆排序)

def adjust(a, root, n):     k = a[root-1]     c = root * 2     while c <= n:         if c + 1 <= n and a[c] > a[c-1]:             c += 1         if a[c-1] <= k:             break         a[c/2-1] = a[c-1]         c *= 2     a[c/2-1] = k def he