java如何计算中位的数

  介绍

这篇文章将为大家详细讲解有关java如何计算中位数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近工作需要要求把python的代码写成java版本,python中有一个np。()求中位数中位数的方法,java决定手写一个

<强>先说说什么是中位数:

中位数就是中间的那个数,

如果一个集合是奇数个,那么中位数就是按大小排列后,最中间那个数,

如果一个集合是偶数个,那么中位数就是按大小排列后,最中间那两个数的平均数。

<强>比如:

1, 2, 3, 4, 5那中位数就是3

1, 2, 3, 4, 5, 6那中位数就是(3 + 4)/2=3.5

知道逻辑后方法就很简单了下面是代码

公共静态void main (String [] args) {
  List总=new ArrayList ();
  total.add (4);
  total.add (2);
  total.add (3);
  total.add (1);
  total.add (5);
  total.add (6);
  双a=值(总);
  System.out.println(一个);
  }
  私有静态双位数(List){
  双j=0;//集合排序
  Collections.sort(总);
  int大?total.size ();
  如果(大小% 2==1){
  j=total.get((号)/2);
  其他}{//加0.0是为了把int转成两类型,否则除以2会算错
  j=(total.get(大?2 - 1)+ total.get(大?2)+ 0.0)/2;
  }
  返回j;
  }

1。方法内先判断集合是奇数还是偶数,如果是奇数那么就是第n + 1/2个数,也就是下标为n-1/2的值,

如果是偶数就是第n/2和n/2 + 1的数的平均值也就是下标为n/2和n/2的平均值

2。该方法传入的是集列表合如果为数组可以先用arrays . aslist()方法转换后传入

<强> Java计算中位数,方差,标准差,众数

我就废话不多说了,大家还是直接看代码吧~

进口java.text.DecimalFormat;
  进口java.util。*;/* *
  *数学算法(数学算法(方差,标准差,中位数,众数))
  * @author
  *
  */公开课MathAlgorithm {
  私人最终静态双距离=999;//Double.MAX_VALUE;//双类型的最大值,太大的双值,相乘会达到无穷大
  私人最终静态双dmin=Double.MIN_VALUE;//双类型的最小值
  私人最终静态整数n=100;//假设求取100个房子数的方差和标准差
  
  公共静态void main (String [] args) {
  随机随机=new随机();
  双[]x=新双[n];
  for (int i=0;我& lt;n;我+ +){//随机生成n个数的两倍
  x[我]=Double.valueOf (Math.floor (random.nextDouble() *(距离- dmin)));
  System.out.println (x[我]);
  }//设置房子字符串输出格式,不以科学计数法输出
  DecimalFormat df=new DecimalFormat(“#, # # 0.00“);//格式化设置//计算方差
  双dV=getVariance (x);
  System.out.println(“方差=?+ df.format (dV));//计算标准差
  双dS=getStandardDiviation (x);
  System.out.println(“标准差=?+ df.format (dS));
  
  
  int [] intArr={5 10 15 8 6};
  System.out.println (Arrays.toString (intArr) +“;中位数:“+ (intArr)中位数);
  
  int [] intArr2={5、10、15、8、6、7};
  System.out.println (Arrays.toString (intArr2) +“;中位数:“+ (intArr2)中位数);
  
  int [] arr={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 1, 2, 2, 3, 4, 5};
  
  ListmodalNums=getModalNums (arr);
  System.out.println(“众数:“+ modalNums);
  
  浮动[]arr2={3.1 2.1 1.1 0.1 f, f, f, f, f 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 10.1, 1.1, 1.1, 2.1, 2.1, 3.1, 4.1, 5.1 f};
  
  ListmodalNums2=getModalNums (arr2);
  
  System.out.println(“众数:“+ modalNums2);
  }/* *
  *方差s ^ 2=[(x1 x) ^ 2 +…(xn-x) ^ 2)/n
  * @param x
  * @return
  */公共静态双getVariance (double [] x) {
  int m=x.length;
  双金额=0;
  for (int i=0;我& lt;m;我+ +){//求和
  和+=x[我];
  }
  双戴夫=总和/m;//求平均值
  双dVar=0;
  for (int i=0;我& lt;m;我+ +){//求方差
  dVar +=(x[我]-戴夫)* (x[我]-戴夫);
  }
  返回dVar/m;
  }/* *
  *标准差σ=蘳 ^ 2)
  * @param x
  * @return
  */公共静态双getStandardDiviation (double [] x) {
  int m=x.length;
  双金额=0;
  for (int i=0;我& lt;m;我+ +){//求和
  和+=x[我];
  }
  双戴夫=总和/m;//求平均值
  双dVar=0;
  for (int i=0;我& lt;m;我+ +){//求方差
  dVar +=(x[我]-戴夫)* (x[我]-戴夫);
  }
  返回数学。√dVar/m);
  }/* *
  *中位数(int)
  * @param num:一个整数列表。
  * @return:一个整数表示数组的中间的数。
  */公共静态int值(int [] num) {
  如果(nums.length==0)
  返回0;
  int开始=0;
  int结束=nums.length-1;
  int指数=分区(num,开始,结束);
  如果(nums.length % 2==0) {
  而(指数!=nums.length/2) {
  如果(index> nums.length/2) {
  指数=分区(num、启动索引1);
  其他}{
  指数=分区(num,指数+ 1,);
  }
  }
  其他}{
  而(指数!=nums.length/2) {
  如果(index> nums.length/2) {
  指数=分区(num、启动索引1);
  其他}{
  指数=分区(num,指数+ 1,);
  }
  }
  }
  返回num(指数);
  }
  
  私有静态int分区(int num [], int, int) {
  int左=开始;
  int右=结束;
  int主=num(左);
  而(left

java如何计算中位的数