用java写一个求中位数代码
时间: 2023-06-26 09:07:50 浏览: 155
以下是使用Java编写的求中位数的代码:
```java
import java.util.Arrays;
public class Median {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 4, 1, 9, 3, 6, 7};
double median = findMedian(arr);
System.out.println("中位数为:" + median);
}
public static double findMedian(int[] arr) {
Arrays.sort(arr);
int len = arr.length;
if (len % 2 == 0) {
return (double) (arr[len / 2 - 1] + arr[len / 2]) / 2;
} else {
return (double) arr[len / 2];
}
}
}
```
这个程序首先使用 `Arrays.sort()` 对数组进行排序,然后根据数组长度的奇偶性来计算中位数。如果数组长度为偶数,中位数为中间两个数的平均值;如果数组长度为奇数,中位数为中间的那个数。
相关问题
用JAVA写一个输出数字位数的程序
可以使用Java中的数学库Math类来实现输出数字位数的功能,具体代码如下:
```java
import java.util.Scanner;
public class DigitCount {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = input.nextInt();
int count = (int) Math.log10(num) + 1;
System.out.println("数字 " + num + " 的位数为:" + count);
input.close();
}
}
```
运行程序后,输入一个整数,程序会输出该整数的位数。其中,使用Math类的log10方法可以计算出一个数的位数,再通过强制类型转换将结果转换为整数即可。
用Java写不用排序求出数组的中位数
可以使用快速选择算法来解决这个问题,快速选择算法的思路类似于快速排序,但是只需要定位到第 k 小的元素(在本题中 k 为数组长度的一半)。
具体实现步骤如下:
1. 选取数组中的一个元素作为 pivot。
2. 将数组分为两部分:小于 pivot 的部分和大于等于 pivot 的部分。
3. 如果小于 pivot 的部分的长度大于等于 k,那么说明中位数在小于 pivot 的部分中,对小于 pivot 的部分递归执行快速选择算法。
4. 如果小于 pivot 的部分的长度小于 k,那么说明中位数在大于等于 pivot 的部分中,对大于等于 pivot 的部分递归执行快速选择算法。
5. 当小于 pivot 的部分的长度正好为 k 时,pivot 即为中位数。
下面是 Java 代码实现:
```
public static int findMedian(int[] nums) {
int k = nums.length / 2;
int left = 0, right = nums.length - 1;
while (left <= right) {
int pivotIndex = partition(nums, left, right);
if (pivotIndex == k) {
return nums[pivotIndex];
} else if (pivotIndex < k) {
left = pivotIndex + 1;
} else {
right = pivotIndex - 1;
}
}
return -1;
}
private static int partition(int[] nums, int left, int right) {
int pivot = nums[left];
int i = left;
for (int j = left + 1; j <= right; j++) {
if (nums[j] < pivot) {
i++;
swap(nums, i, j);
}
}
swap(nums, i, left);
return i;
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
```
其中,`partition` 方法用于实现快速排序中的分区操作,将小于 pivot 的元素移动到数组的左侧,大于等于 pivot 的元素移动到数组的右侧。`findMedian` 方法则是快速选择算法的主要实现,用于找到数组的中位数。