首页 > 其他分享 >heapq 对有序的数组列表进行整体排序

heapq 对有序的数组列表进行整体排序

时间:2023-05-31 10:32:09浏览次数:31  
标签:sort heapq top arr 799 列表 heap 80 排序

 

"""
功能:实现对有序的多个数组整体排序,获取top k个最小元素
"""
from heapq import *


def heap_sort(arr, top_k):
    q = []
    for i in range(len(arr)):
        heappush(q, (arr[i][0], i, 0))
    result = []
    for k in range(top_k):
        if q:
            data, index, i = heappop(q)
            result.append(data)
            if i+1 < len(arr[index]):
                heappush(q, (arr[index][i+1], index, i+1))
    return result

def test_heap_sort():
    print(heap_sort(arr=[[1,3,4,9,80,799], [0,4,6,8,12,999], [123,345,987]], top_k=10))
    print(heap_sort(arr=[[1,3,4,9,80,799], [0,4,6,8,12,999], [123,345,987]], top_k=3))
    print(heap_sort(arr=[[1,3,4,9,80,799]], top_k=10))
    print(heap_sort(arr=[[1,3,4,9,80,799]], top_k=3))
    print(heap_sort(arr=[[1,3,4,9,80,799]], top_k=0))


if __name__ == "__main__":
    test_heap_sort()

  

标签:sort,heapq,top,arr,799,列表,heap,80,排序
From: https://blog.51cto.com/u_11908275/6384772

相关文章

  • 结构体排序 sort排序
    首先,在学习c的时候,应该学了很多排序方法吧,类似于冒泡排序呀,选择排序,插入排序,快排呀等等,但是,在c++中,有一个很好的排序就是sort排序,在stl里面,sort排序可以说,无论是时间复杂度还是空间复杂度,都是很优化的,这就足以见证sort排序的强大了,也说明sort排序的重要性。在C++中使用sort()函数......
  • wukong引擎源码分析之索引——part 1 倒排列表本质是有序数组存储
    searcher.IndexDocument(0,types.DocumentIndexData{Content:"此次百度收购将成中国互联网最大并购"})engine.go中的源码实现://将文档加入索引////输入参数://docId标识文档编号,必须唯一//data见DocumentIndexData注释////注意://1.这个函数是线程安全......
  • ES搜索排序,文档相关度评分介绍——Vector Space Model
    VectorSpaceModelThe vectorspacemodel providesawayof comparingamultitermqueryagainstadocument.Theoutputisasinglescorethatrepresentshowwellthedocumentmatchesthequery.Inordertodothis,themodelrepresentsboththedocumentan......
  • 排序(快排/归并/堆排/冒泡)
    912.排序数组稳定排序:如果a原本在b前面,且a==b,排序之后a仍然在b前面。非稳定排序:如果a原本在b前面,且a==b,排序之后a不一定在b前面。原地排序/非原地排序:区别在于是否使用额外的数组辅助排序快排快排不稳定平均时间复杂度\(O(n\logn)\)简单快......
  • qsort排序的用法
    //voidBubble_sort(intarr[],intsz)//{// inti=0;// for(i=0;i<sz-1;i++)//确定排序执行的次数// {// intj=0;// for(j=0;j<sz-1-i;j++)//确定每次排序两组元素的对比次数// {// inttmp=0;// if(arr[j]>arr[j+1])// {// tmp=......
  • 如何使用ListView以提供一个选择列表给用户
    如何使用ListView以提供一个选择列表给用户ListView是一个列表框控件。它可以在一个垂直滚动区域中显示一个项目列表,并允许用户进行选择。效果展示示例代码importjavafx.application.Application;importjavafx.collections.ObservableList;importjavafx.geometry.Inse......
  • leetcode Kth Largest Element in a Stream——要熟悉heapq使用
    703.KthLargestElementinaStreamEasyDesignaclasstofind thekthlargestelementinastream.Notethatitisthekthlargestelementinthesortedorder,notthekthdistinctelement.Your KthLargest classwillhaveaconstructorwhichacceptsanin......
  • mysql设置字段的排序规则对大小写敏感
    在开发中遇到一个问题:在插入一张表中提示主键冲突了,对数据分析了很久,没有发现问题。后面发现是数据库设计的时候设定的排序规则指定的是COLLATE=utf8_general_ci,而不是用COLLATE=utf8_bin,这两个规则的区别是什么呢?utf8_general_ci:这个排序规则是不区分大小写的,也就是说,在比......
  • 列表加法、乘法
    fruit=["apple","orange","banana","cherry"]numlist=[6,7]newlist=fruit+numlistprint(newlist)#['apple','orange','banana','cherry',6,7]print([1,2]+[3,4......
  • 常用的排序算法总结
    常用的排序算法一、冒泡排序冒泡排序(BubbleSort),是一种较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这......