选择性问题——求第K个最大元素

假设共有n个数,求出第K个最大元素。

方法:

1) 直接排序

建立一个长度为n的数组,然后进行排序,根据下标选择元素。O(n^2) / O(nlogn)

2) 插入排序

建立一个长度为k的数组,以递减顺序排列。然后对于剩下的n-k个元素,如果元素的值小于数组中最小元素的值,直接进行忽略;否则根据大小进行插入排序。等插入完成后,数组最后一个 元素即为所求元素。 最坏情况:O(n^2),一般情况:O(k*N)

3) 建堆

将n个元素建立大根堆,然后进行k-1次删除根结点后,得到的根结点就是第k大的元素。

4)建堆的改进

依照1)和2),可以只建立k个元素的堆,然后根据元素大小进行修改。

5)快速排序

摘自他人

猜你喜欢

转载自blog.csdn.net/lansehuanyingyy/article/details/80475950