无序数组的中位数java
时间: 2023-11-18 16:53:46 浏览: 143
Java中数组实例---冒泡排序.pdf
在Java中,可以使用PriorityQueue来实现无序数组的中位数。PriorityQueue是一个基于优先级堆的无界优先级队列,默认是一个最小堆。具体实现可以参考以下代码:
```
import java.util.PriorityQueue;
public class Median {
public static double median(int[] array) {
int heapSize = array.length / 2 + 1;
PriorityQueue<Integer> heap = new PriorityQueue<>(heapSize);
for (int i = 0; i < heapSize; i++) {
heap.add(array[i]);
}
for (int i = heapSize; i < array.length; i++) {
if (heap.peek() < array[i]) {
heap.poll();
heap.add(array[i]);
}
}
if (array.length % 2 == 1) {
return (double) heap.peek();
} else {
return (double) (heap在Java中,可以使用PriorityQueue来实现无序数组的中位数。PriorityQueue是一个基于优先级堆的无界优先级队列,默认是一个最小堆。具体实现可以参考以下代码:
```
import java.util.PriorityQueue;
public class Median {
public static double median(int[] array) {
int heapSize = array.length / 2 + 1;
PriorityQueue<Integer> heap = new PriorityQueue<>(heapSize);
for (int i = 0; i < heapSize; i++) {
heap.add(array[i]);
}
for (int i = heapSize; i < array.length; i++) {
if (heap.peek() < array[i]) {
heap.poll();
heap.add(array[i]);
}
}
if (array.length % 2 == 1) {
return (double) heap.peek();
} else {
return (double) (heap.poll() + heap.peek()) / 2.0;
}
}
public static void main(String[] args) {
int[] array = new int[]{12, 34, 1, 209, 17, 900, -10};
System.out.println(median(array));
}
}
```
其中,首先定义了一个大小为数组长度一半加一的最小堆,然后将数组的前一半元素加入堆中。接着,遍历数组的后一半元素,如果当前元素比堆顶元素大,则将堆顶元素弹出,将当前元素加入堆中。最后,如果数组长度为奇数,则中位数就是堆顶元素;如果数组长度为偶数,则中位数就是堆顶元素和次顶元素的平均值。
阅读全文