找出数组中的第K大的元素
2015-12-08 20:37
375 查看
问题描述
找出数组中的第K大的元素,时间复杂度为O(n)代码
public class FindK { //随机取一个基准数pivot,然后遍历数组一次,比基准数大的逐一的放在最前面,最后返回基准数的位置 //并且次基准数在a[left...right]中是第(k-left+1)大的元素 public static int randomPartition(int[] a,int left,int right){ int pivot=a[right],k=left-1; for(int i=left;i<=right;i++){ if(a[i]>pivot){ int temp=a[i]; a[i]=a[++k]; a[k]=temp; } } int t=a[right]; a[right]=a[++k]; a[k]=t; return k; } //得到第K大的元素 public static int getMaxK(int[] a,int k,int left,int right){ int maxK=randomPartition(a,left,right); //num表示是第a[maxK]是第num大 int num=maxK-left+1; if(num==k) return a[maxK]; else if(num<k) return getMaxK(a,k-num,maxK+1,right); else return getMaxK(a,k,left,maxK-1); } //验证 public static void main(String[] args) { int[] a={12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5}; //依次求出第i大的元素最后打印的结果是降序排列 for(int i=0;i<a.length;i++){ System.out.println(getMaxK(a,i+1,0,14)); } } }
相关文章推荐
- shell 脚本中将输出内容赋值给一个变量时的换行问题
- OpenJudge_P2229 Sumsets
- strstr
- MyEclipse中jquery.js文件报missing semicolon的错误解决
- Idea开发环境中搭建Maven并且使用Maven打包部署程序
- 马的走法
- 黑马程序员_JavaIO流(四)
- iOS笔试题03
- Python if else for while 语句控制 【整理】
- leetcode -- Implement strStr() -- KMP难理解,但考得不多,知道就好
- 深入浅出理解遗传算法
- 兔子问题
- 【转载】COM 组件设计与应用(十七)——持续性
- 【特征匹配】RANSAC算法原理与源码解析
- C++ 链表移动 类初始化
- 贪心算法解决背包问题
- 安装Apache后,恢复系统后修复Apache服务问题
- 北大OJ3977
- 2 Java语言基础组成
- UNITY3D九宫拼图心得