Java 四分位算法

匿名 (未验证) 提交于 2019-12-02 20:41:15

四分位算法实例()

  实例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     }
文章来源: Java 四分位算法
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!