您的位置:首页 > 编程语言 > Java开发

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

2017-11-14 20:57 344 查看
四分位算法中最简单的一种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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: