假设共有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)快速排序
摘自他人