四分位算法中的一种java代码实现

四分位算法中最简单的一种java代码实现:

Q1的位置= (n+1) × 0.25
Q2的位置= (n+1) × 0.5
Q3的位置= (n+1) × 0.75
n表示项数
  /**
     * 四分位算法
   *@param
arr 长度为n的数组
   *@return quartiles Q1/Q2/Q3数组
**/ public double[] getQuartiles(double[] arr) { double[] arr1 = new double[4]; // 长度小于4时,补齐arr数组至长度四位 if (arr.length < 4) { for (int i = 0; i < arr.length; i++) { arr1[i] = arr[i]; } for (int k = arr.length; k < 4; k++) { arr1[k] = arr1[k]; } return arr1; } double[] tempArr = Arrays.copyOf(arr, arr.length); Arrays.sort(tempArr); double[] quartiles = new double[3]; int n = arr.length; double Q1 = (n+1) * 0.25D; double Q2 = (n+1) * 0.5D; double Q3 = (n+1) * 0.75D; //Q1 if(Q1 % 2 == 0){ quartiles[0] = tempArr[(int)Q1]; }else{ double Q1y = Q1-Math.floor(Q1); double Q1r; Q1r = (1D - Q1y) * tempArr[(int) Math.floor(Q1)-1] + Q1y * tempArr[(int) Math.ceil(Q1)-1]; quartiles[0] = Q1r; } //Q2 if(Q2 % 2 == 0){ quartiles[1] = tempArr[(int)Q2]; }else{ double Q2y = Q2-Math.floor(Q2); double Q2r; Q2r = (1D - Q2y) * tempArr[(int) Math.floor(Q2)-1] + Q2y * tempArr[(int) Math.ceil(Q2)-1]; quartiles[1] = Q2r; } //Q3 if(Q3 % 2 == 0){ quartiles[2] = tempArr[(int)Q3]; }else{ double Q3y = Q3-Math.floor(Q3); double Q3r; Q3r = (1D - Q3y) * tempArr[(int) Math.floor(Q3)-1] + Q3y * tempArr[(int) Math.ceil(Q3)-1]; quartiles[2] = Q3r; } return quartiles; }

 

posted @ 2017-11-14 20:57  奋斗的小蘑菇  阅读(981)  评论(0编辑  收藏  举报