2018年1月28日

O(n)求数组中第k大的元素——堆排序

摘要: 建堆:O(n) 询问:O(logn) 建堆复杂度的证明: 首先这个循环是从i = headsize/2 -> 1,也就是说这是一个bottom-up的建堆。于是,有1/2的元素向下比较了一次,有1/4的向下比较了两次,1/8的,向下比较了3次,......,1/2^k的向下比较了k次,其中1/2^k 阅读全文

posted @ 2018-01-28 16:29 Na_OH 阅读(667) 评论(0) 推荐(0) 编辑

O(n)求数组中第k大的元素——快排划分

摘要: 利用了快排的划分,以及前面说的那种计数的方法。 1+1/2+1/4+...=2*n #include<cstdio> //1+1/2+1/4+1/8+1/16+...=2*n const int MAXN=1007; void swap(int *x,int *y){ int tmp=*x; *x= 阅读全文

posted @ 2018-01-28 16:11 Na_OH 阅读(214) 评论(0) 推荐(0) 编辑

导航