Java选择问题代码
来源:互联网 发布:服装设计知乎 编辑:程序博客网 时间:2024/06/01 08:57
选择问题是指,在某个无序集中选择第K个最大值的问题
比较初级的解决方案是:
先采用冒泡排序之类的算法,将无序集进行有序化,再从中取出第K大的值
例如:
/** * 从大到小的冒泡排序 * @param ints * @return */ public static void bubbleSort(int[] numbers){ for (int j = numbers.length; j > 0; j--) { for (int i = 0; i < numbers.length-1; i++) { if(numbers[i]<numbers[i+1]){ int k = numbers[i]; numbers[i] = numbers[i+1]; numbers[i+1] = k; } } } }
由于计数习惯上的区别,第k个最大值实际上应该位于集length的第k-1位置上,故取出已有序化的集中第k-1位的元素,就是所要的元素.
此方法在算法效率上并不高,另一个相对比较好的算法是:
一:取该集的前k个元素另成一子集,对其进行排序
二:遍历父集中的剩余元素,与子集的第k位进行比较,若更大,则为其在子集中找到正确的位置,后面的元素顺序向后调整,末位挤出
三:遍历完成后,从子集中取出第k-1个元素,就是所要的元素
Java:
/** * 创建一个长度为k的微型数组,排序后遍历源数组,将源数组中比微型数组内元素大的元素置入正确位置,遍历完成后取出第k-1位的元素 * @param numbers * @param k * @return */ public static int smallArraysSortSelection(int[] numbers, int k){ //创建一个微型数组,长度为k,并截取源数组中的第0到k-1位 int[] smallArrays = Arrays.copyOf(numbers, k); //从源数组第k位开始遍历至数组末位 for (int i = k; i < numbers.length; i++) { //如果数组中的元素比之微型数组的最后一位大,则为其在微型数组中找出位置,将末位元素挤出 if(numbers[i]>smallArrays[k-1]){ int index = k-1; while(index > 0&&numbers[i]>=smallArrays[index]){ index--; } for (int j = smallArrays.length-1; j > index; j--) { smallArrays[j] = smallArrays[j-1]; } smallArrays[index] = numbers[i]; } } return smallArrays[k-1]; }
0 0
- Java选择问题代码
- Java选择排序代码
- Java 实现选择排序代码
- Java 编程--代码的选择
- JAVA冒泡算法和选择算法代码
- java代码实现选择法排序
- java排序之叁------选择排序代码
- 用JAVA代码实现选择排序
- Java代码 实现直接选择排序
- 选择排序的Java代码实现
- java 通过代码实现动态选择数据源
- Java中选择排序的代码实现
- 选择排序学习及java代码实现
- 约瑟夫问题Java代码
- Java代码编译问题
- 约瑟夫问题 java代码
- Java代码包问题:
- TopK问题 Java代码
- SfM(一)
- TableViewCell上展示倒计时
- 51822使用RTT代替出口prinft输出
- JS网页换肤读取cookie基础案例
- 查看与清空有关浏览器的缓存
- Java选择问题代码
- 基于commons-email,web端发送邮件
- 解析异步消息处理机制
- C语言实现多线程和多进程服务器
- How to install ia32-libs in Ubuntu 14.04 LTS
- 搜索条 searcherBar 去掉灰色背景
- 原型对象关系
- C++调用微软接口kill进程
- 80x86保护模式下特权级转移