Java 四分位算法
2018-08-21 05:33:09来源:博客园 阅读 ()
四分位算法实例(复制百度百科)
—— 实例1:
数据总量: 6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36
由小到大排列的结果: 6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49
一共11项
Q1 的位置=(11+1) × 0.25=3, Q2 的位置=(11+1)× 0.5=6, Q3的位置=(11+1) × 0.75=9
Q1 = 15,
Q2 = 40,
Q3 = 43
—— 实例2:
数据总量: 7, 15, 36, 39, 40, 41
一共6项
数列项为偶数项时,四分位数Q2为该组数列的中数,
(n+1)/4= 7/4 =1.75,Q1在第一与第二个数字之间,
3(n+1)/4= 21/4 =5.25, Q3在第五与第六个数字之间,
Q1 = 0.75*15+0.25*7 = 13,
Q2 = (36+39)/2= 37.5,
Q3 = 0.25*41+0.75*40 = 40.25.
Java 代码
1 public static void fourDivsion(double[] param){ 2 if(param == null || param.length < 4) return; 3 // 转成BigDecimal类型,避免失去精度 4 BigDecimal[] datas = new BigDecimal[param.length]; 5 for(int i=0; i<param.length; i++){ 6 datas[i] = BigDecimal.valueOf(param[i]); 7 } 8 int len = datas.length;// 数组长度 9 Arrays.sort(datas); // 数组排序,从小到大 10 BigDecimal q1 = null; // 第一四分位 11 BigDecimal q2 = null; // 第二四分位 12 BigDecimal q3 = null; // 第三四分位 13 int index = 0; // 记录下标 14 // n代表项数,因为下标是从0开始所以这里理解为:len = n+1 15 if(len%2 == 0){ // 偶数 16 index = new BigDecimal(len).divide(new BigDecimal("4")).intValue(); 17 q1 = datas[index-1].multiply(new BigDecimal("0.25")).add(datas[index].multiply(new BigDecimal("0.75"))); 18 q2 = datas[len/2].add(datas[len/2-1]).divide(new BigDecimal("2")); 19 index = new BigDecimal(3*(len+1)).divide(new BigDecimal("4")).intValue(); 20 q3 = datas[index-1].multiply(new BigDecimal("0.75")).add(datas[index].multiply(new BigDecimal("0.25"))); 21 }else{ // 奇数 22 q1 = datas[new BigDecimal(len).multiply(new BigDecimal("0.25")).intValue()]; 23 q2 = datas[new BigDecimal(len).multiply(new BigDecimal("0.5")).intValue()]; 24 q3 = datas[new BigDecimal(len).multiply(new BigDecimal("0.75")).intValue()]; 25 } 26 // 保留两位小数(四舍五入),输出到控制台 27 System.out.println(q1.setScale(2, BigDecimal.ROUND_HALF_UP)+" "+ 28 q2.setScale(2, BigDecimal.ROUND_HALF_UP)+" "+ 29 q3.setScale(2, BigDecimal.ROUND_HALF_UP)); 30 } 31 32 public static void main(String[] args) { 33 double[] temp = new double[]{6.0, 47.0, 49.0, 15.0, 42.0, 41.0, 7.0, 39.0, 43.0, 40.0, 36.0}; 34 double[] temp1 = new double[]{7, 15, 36, 39, 40, 41}; 35 IndexAnalysisService.fourDivsion(temp); 36 IndexAnalysisService.fourDivsion(temp1); 37 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash