📜  数据结构 |堆 |问题 4(1)

📅  最后修改于: 2023-12-03 15:10:19.618000             🧑  作者: Mango

数据结构 | 堆 | 问题 4
问题描述

在一个无序数组中找出第K大的数。

解决方法

方法一:排序

对数组进行快速排序,时间复杂度为O(nlogn),然后找出第K大的数即可。代码如下:

def quick_sort(arr):
    if len(arr) < 2:
        return arr
    else:
        pivot = arr[0]
        less = [i for i in arr[1:] if i <= pivot]
        greater = [i for i in arr[1:] if i > pivot]
        return quick_sort(greater) + [pivot] + quick_sort(less)

def find_kth_largest(arr, k):
    sorted_arr = quick_sort(arr)
    return sorted_arr[-k]

方法二:堆排序

建立一个小根堆,依次将数组中的元素加入小根堆中,当小根堆中的元素个数大于k时,就将堆顶元素弹出,最后堆顶元素即为第K大的数。时间复杂度为O(nlogk)。

代码如下:

import heapq

def find_kth_largest(arr, k):
    heap = []
    for i in arr:
        heapq.heappush(heap, i)
        if len(heap) > k:
            heapq.heappop(heap)
    return heap[0]
总结

堆排序比快速排序更具效率,尤其是在数组大小接近k时。可以根据具体情况选择不同的解法。