对于长度为n的整型数组A,随机生成其数组元素值,然后实现一个线性时间的算法,在该数组中查找其中项。

 package org.xiu68.exp.exp3;

 import java.util.ArrayList;
import java.util.List;
import java.util.Random; public class Exp3_1 { //对于长度为n的整型数组A,随机生成其数组元素值,然后实现一个线性时间的算法,在该数组中查找其中项
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> array=new ArrayList<>();
for(int j=0;j<10;j++){
array.clear();
for(int i=0;i<10;i++){
int k=new Random().nextInt(100);
array.add(k);
System.out.print(k+" ");
}
System.out.println();
System.out.println("中位数为"+findMedian(array,array.size()/2));
}
} //获取中位数
public static int findMedian(List<Integer> array,int k){ int v=array.get(0);
ArrayList<Integer> leftList=new ArrayList<>(); //比v小的集合
ArrayList<Integer> equalList=new ArrayList<>(); //与v相等的集合
ArrayList<Integer> rightList=new ArrayList<>(); //比v大的集合 for(int i=0;i<array.size();i++){
int value=array.get(i);
if(value>v){
rightList.add(value);
}else if(value<v){
leftList.add(value);
}else{
equalList.add(value);
}
}
//findMedian(S,k)=findMedian(SL,k) 如果k<=|SL|
if(k<=leftList.size())
return findMedian(leftList,k);
//findMedian(S,k)=v 如果|SL|<k<=|SL|+|SV|
else if(k>leftList.size() && k<=leftList.size()+equalList.size())
return equalList.get(0);
//findMedian(S,k)=findMedian(SR,k-|SL|-|SV|) 如果k>|SL|+|SV|
else
return findMedian(rightList,k-leftList.size()-equalList.size());
} }

Expm 2_2 查找中项问题的更多相关文章

  1. List和Dictionary泛型类查找效率浅析

    List和Dictionary泛型类查找效率存在巨大差异,前段时间亲历了一次.事情的背景是开发一个匹配程序,将书籍(BookID)推荐给网友(UserID),生成今日推荐数据时,有条规则是同一书籍七日 ...

  2. Java 实现二分法查找算法

    算法 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2. 1.开始令 ...

  3. 【经验】angularjs 实现带查找筛选功能的select下拉框

    一.背景 对于select的下拉列表,像国家选择这样的功能,全世界那么多国家,一直拉滚动条多辛苦,眼睛也要盯着找,累!so,为优化用户体验,带查找功能的下拉框是非常非常有必要的.都知道jquery里有 ...

  4. WPF TreeView 虚拟化-设置滚动到选中项

    前言 列表滚动到具体的数据项? ListBox提供了简易快捷的滚动定位函数ScrollIntoView. TreeView树状结构列表,则没有此类方法,无法与ListBox一样,直接设置滚动到具体的数 ...

  5. 在SQL2008查找某数据库中的列是否存在某个值

    在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...

  6. C语言 · 查找整数 · 基础练习

    问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000. 第三行包含一个 ...

  7. ExtJS 4.2 组件的查找方式

    组件创建了,就有方法找到这些组件.在DOM.Jquery都有各自的方法查找元素/组件,ExtJS也有自己独特的方式查找组件.元素.本次从全局查找.容器内查找.form表单查找.通用组件等4个方面介绍组 ...

  8. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  9. 在vim中使用查找命令查找指定字符串

    要自当前光标位置向上搜索,请使用以下命令:         /pattern   Enter           其中,pattern   表示要搜索的特定字符序列.         要自当前光标位置 ...

随机推荐

  1. 运行vb写的程序,有些电脑上会弹出一个与office相关的窗口

    到网上搜索了一下,找了几个解决方案,不过我的电脑上没出现过,所以先收藏一下,或许以后能用上. 来自:http://bbs.csdn.net/topics/380204412 今天将注册表的项一个个删除 ...

  2. python post提交

    # coding:utf8 import requests def login(): url = 'http://back.xiyilang.cc/staff/login.json' headers= ...

  3. P4147 玉蟾宫

    P4147 玉蟾宫 给定一个 \(N * M\) 的矩阵 求最大的全为 \(F\) 的子矩阵 Solution 悬线法 限制条件为转移来的和现在的都为 \(F\) Code #include<i ...

  4. Openresty+redis实现灰度发布

    一.架构 环境: 192.168.189.131:tomcat服务 192.168.189.132:tomcat服务 192.168.189.130:OpenResty服务.redis服务 流程: 请 ...

  5. python---web框架本质(1)

    总的来说php相对较为简单,但是内部封装太多,不利于对编程的更本质探索. 但是对于生产开发确实是一门不错的语言.python对于socket以及web框架的理解更加透彻 # coding:utf8 # ...

  6. Linux记录-Linux Swap分区虚拟内存相关解决方案

    Swap用途:Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区.当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临 ...

  7. ruby pluck用法,可以快速从数据库获取 对象的 指定字段的集合数组

    可以快速从数据库获取 对象的 指定字段的集合数组 比如有一个users表,要等到user的id数组: select id from users where age > 20; 要实现在如上sql ...

  8. Dubbo集群容错

    转自dubbo官网文档http://dubbo.apache.org/zh-cn/blog/dubbo-cluster-error-handling.html Design For failure 在 ...

  9. spring @Entity @Table

    import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; impor ...

  10. 源码分析之CountDownLatch

    https://www.cnblogs.com/leesf456/p/5406191.html