对于长度为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. 【洛谷P4097】Segment 李超线段树

    题目大意:维护一个二维平面,给定若干条线段,支持询问任意整数横坐标处对应的纵坐标最靠上的线段的 id,相同高度取 id 值较小的,强制在线. 题解:初步学习了李超线段树.李超线段树的核心思想在于通过标 ...

  2. 【洛谷P1376】机器工厂

    题目大意:给定两个有 N 个数的序列 A,B,每个点有一个对应的权值,现需要计算答案的贡献:\(B[i]*min\{A[j]+s*(i-j),j\in[1,i] \}\) 的最小值. 题解:由于 B ...

  3. python(五)——运算符

    1.成员运算符,判断某个东西是否在某个东西里包含:in,not in name = "abcd" if "ac" in name: print("ok ...

  4. Educational Codeforces Round 52 (Rated for Div. 2) E. Side Transmutations

    http://codeforces.com/contest/1065/problem/E 数学推导题 #include <bits/stdc++.h> using namespace st ...

  5. 使用iostat来对linux硬盘IO性能进行检测

    -x显示扩展统计数据 # 每隔1s显示6个统计数据 $ iostat -x 1 6 # 每隔1s显示磁盘sda的6个统计数据 $ iostat -x sda 1 6 # 每隔1s显示设备sda及其分区 ...

  6. 【python】UnicodeEncodeError: 'ascii' codec can't encode/decode characters

    解决方案在文件头插入 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8')

  7. Tony的口胡呼呼(。-ω-)zzz

    三分 给定平面内 \(n <= 2000\) 个节点, 求平面内一点使得到所有点的欧几里得距离和最小 确定 \(y\) 轴时 \(x\) 轴满足单峰函数 \(x\) 轴同理 三分套三分即可 深度 ...

  8. ansible-playbook 变量(vars)

    变量优先级: ansible-playbook中定义变量: - hosts: webservers vars: http_port: 80 ①.在host里定义变量 执行结果: ②.使用var_fil ...

  9. javascript 模块化规范

    服务器端规范 - CommonJS Node.js 浏览器端规范 - AMD RequireJS - CMD SeaJS

  10. git 分支branch

    转:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137584003893 ...