作业:查找第k大的元素

所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题。

解法1:插入排序

由于是要找 k 个最大的数,所以没有必要对所有数进行完整的排序。每次只保留 k 个当前最大的数就可以,然后每次对新来的元素跟当前 k 个树中最小的数比较,新元素大的话则插入到数组中,否则跳过。循环结束后数组中最小的数即是我们要找到第 k 大的数。 时间复杂度 (n-k)logk

注意:嵌套for循环里面,比较的对象;以及range的范围

--------------------- 本文来自 一只小熊啊 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Strive_0902/article/details/82940456?utm_source=copy

 

def Find_Kth_max(array, k):
    for i in range(1, k):
        for j in range(i, 0, -1):
            if array[j] > array[j - 1]:
                array[j], array[j - 1] = array[j - 1], array[j]
            else:
                pass
    for i in range(k, len(array)):
        if array[i] > array[k - 1]:
            array[k - 1] = array[i]
            for j in range(k - 1, 0, -1):
                if array[j] > array[j - 1]:
                    array[j], array[j - 1] = array[j - 1], array[j]
                else:
                    pass
    return array[k - 1]

n = int(input("想查找第几大的元素:"))
print(Find_Kth_max([47, 44, 40, 18, 99, 36, 37, 83, 42, 16, 5, 15, 0], n))

输出:

想查找第几大的元素:5
42

 

posted @ 2018-10-08 12:56  cn_gzb  阅读(169)  评论(0编辑  收藏  举报