所谓“第(前)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