首页 > 其他分享 >堆排序(topk 问题)(NB)

堆排序(topk 问题)(NB)

时间:2023-08-12 22:57:56浏览次数:37  
标签:NB 堆排序 li sift topk ls heap low

博客地址:https://www.cnblogs.com/zylyehuo/

# _*_coding:utf-8_*_
# 比较排序

import random


def sift(li, low, high):  # 堆的向下调整(小根堆)
    i = low
    j = 2 * i + 1
    tmp = li[low]
    while j <= high:
        if j + 1 <= high and li[j + 1] < li[j]:
            j = j + 1
        if li[j] < tmp:
            li[i] = li[j]
            i = j
            j = 2 * i + 1
        else:
            break
        li[i] = tmp


def topk(li, k):
    heap = li[0:k]
    for i in range((k - 2) // 2, -1, -1):
        sift(heap, i, k - 1)
    # 1.建堆
    for i in range(k, len(li) - 1):
        if li[i] > heap[0]:
            heap[0] = li[i]
            sift(heap, 0, k - 1)

    # 2.遍历
    for i in range(k - 1, -1, -1):
        heap[0], heap[i] = heap[i], heap[0]
        sift(heap, 0, i - 1)
    # 3.出数
    return heap


ls = list(range(1000))
random.shuffle(ls)

print(topk(ls, 10))

标签:NB,堆排序,li,sift,topk,ls,heap,low
From: https://www.cnblogs.com/zylyehuo/p/17625744.html

相关文章

  • 堆排序(内置模块 heapq )(NB)
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_importheapq#q->queue优先队列importrandomli=list(range(10))random.shuffle(li)print(li)heapq.heapify(li)#建堆(小根堆)n=len(li)foriinrange(n):print(heapq.heappop(li),......
  • 快速排序(NB)
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_defpartition(li,left,right):tmp=li[left]whileleft<right:whileleft<rightandli[right]>=tmp:#从右面找比tmp小的数right-=1#往左走一步l......
  • 拓端数据tecdat|R语言代写通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
    多变量广义自回归条件异方差(MGARCH)和多变量随机波动率(MSV)模型与马尔可夫链蒙特卡罗方法的贝叶斯估计和比较可以直接和成功地在WinBUGS包中进行。经济全球化和金融市场的完整性促进了对资产定价,风险管理,投资组合选择等各个领域的多元波动建模的需求。因此,两种类型的模型-多变量广......
  • 插件Rainbow Brackets插件使用
    插件RainbowBrackets1.自带花括号彩虹色2.高亮部分代码块command+右键代码块3.着重展示,其余都黑标alt+右键代码块4.取消代码高亮按esc......
  • Paper Reading: NBDT: Neural-Backed Decision Trees
    目录研究动机文章贡献本文方法推理建立层次结构用WordNet标记决策节点微调和树监督损失实验结果对比实验结果可解释性识别错误的模型预测引导图像分类人更倾向的解释识别有缺陷的数据标签优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力......
  • 教你轻松查找Coinbase layer2 base链上的新上线项目
    作为Coinbaselayer2的base链自出生就自带光环,目前base链还没有发行代币的计划,后续是否会发行代币已经怎样获取空投资格,我们会随时关注并及时更新。本期主要讲解怎样查找base上新上线的代币,分析代币的流动性、交易情况、合约安全性综合判断代币的投资等级为代币的价值提供一个客观......
  • Coinbase base链发币教程——base主网跨链桥的使用(ETH和BASE之间跨链)【pdf+视频BASE发
     一、说明目前base主网跨链桥只支持ETH链到BASE链的跨链,其他公链暂时不支持。如果想从BSC,HECO,TRX链上的资产跨链到BASE链上,可以先从该链跨链到ETH链,然后再跨链到BASE链。目前base链支持两种方式的跨链:方法一、直接使用图形界面通过代币的deposit和withdow来实现代币的......
  • 读取sqlite库的wkt类型数据(unbantu中安装spatialite插件)
    一,问题:现在要从sqlite读取wkt类型的数据,写入postgis库中wkt在sqlite中的格式为:  python直接读取的格式是:b'\x00\x01\xef\x7f\x00\x00\xf9\xff\xff\xf3\xc8\xfe*\x' pg库可以直接存的类型是wkt格式: LINESTRINGZ(40.612829447.729325-1.566514,43.813899......
  • ActionBar样式解析
    Android的装饰风格有多种,这些风格的不同之处主要体现在标题栏区域。比如最普通的标题栏仅有图标和标题。还有一些其他的风格,如带进度条的标题栏等。       在Android4.0上,有了新的标题栏,名为ActionBar,它提供了能强大的功能,如支持TAB页,支持菜单等。下面将分析主要的ActionBar......
  • CoinBase是什么?
    什么是CoinBase交易?比特币区块链上的每个区块中都会包含一个或者多个交易(transaction),其中第一个交易就叫做CoinBase交易。什么是CoinBase交易?CoinBase交易是矿工创建的(拥有记账权的节点),主要是为了奖励矿工挖矿而付出的奖励。奖励分为两部分。一部分是出块奖励,这部分是固定的,......