• Java 四分位算法


    四分位算法实例(复制百度百科)

      —— 实例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=3Q2 的位置=(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.75Q1在第一与第二个数字之间,

        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     }
  • 相关阅读:
    String类型作为方法的形参
    [转] 为什么说 Java 程序员必须掌握 Spring Boot ?
    Centos打开、关闭、结束tomcat,及查看tomcat运行日志
    centos中iptables和firewall防火墙开启、关闭、查看状态、基本设置等
    防火墙没有关导致外部访问虚拟机的tomcat遇到的问题和解决方法
    可以ping通ip地址,但是访问80,或者8080报错
    JAVA的非对称加密算法RSA——加密和解密
    CA双向认证的时候,如果一开始下载的证书就有问题的,怎么保证以后的交易没有问题?
    图解HTTPS协议加密解密全过程
    https单向认证服务端发送到客户端到底会不会加密?
  • 原文地址:https://www.cnblogs.com/duniang/p/9506175.html
Copyright © 2020-2023  润新知