Python之堆排序算法实现

#!/usr/bin/python
import heapq
#第一种方法是根据堆排序的原理实现的。
def fixdown(a,k,n):#自顶向下堆化
  N =n-1;
  while 2*k<=N:
    j=2*k;
    if j<N and a[j]<a[j+1]:
      j+= 1;
    if a[k]<a[j]:
      a[k],a[j]=a[j],a[k];
      k=j;
    else:
      break;
def heapSort1(l):
  n = len(l)-1;
  for i in range(n//2,0,-1):
    fixdown(l,i,len(l));
  while n>1:
    l[1],l[n]=l[n],l[1];
    fixdown(l,1,n);
    n-=1;
  return l[1:];
#第二种方法是python自带的堆排序算法,基于小根堆。
def heapSort2(l):
  l = l[1:];
  heapq.heapify(l);
  heap= [];
  while l:
    heap.append(heapq.heappop(l));
  l[:]= heap;
  return l;
  l=[-1,26,5,77,1,61,11,59,15,48,19];#第一个元素不用,占位
res1 = heapSort1(l);
res2 = heapSort2(l);
print "first  result of heapsorting:",(res1);
print "second result of heapsorting:",(res2);

运行结果:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值