/**
* 求一个无序数组的中位数。
* 如:{2,5,4,9,3,6,8,7,1}的中位数为5。 要求:不能使用排序,时间复杂度O(n)。
*/
int [] array = {1,2,3,4,49,55,6,7,80,100};//{2,5,4,9,3,6,8,7,1};
@Test
public void middleNumInArr() {
/**
* TODO 方法一
* 排序 后使用二分查找 找打数组邻近中位数
*/
Arrays.sort(array);
Integer bin_num = array[array.length - 1] / 2;
int left = 0,right = array.length - 1;
int mid = 0;
while(left < right) {
mid = left + ((right - left) >>> 1);
if(array[mid] == bin_num) {
break;
}else if(array[mid] < bin_num) {
left = mid + 1;
}else {
right = mid;
}
}
System.err.println("中位数===========》"+array[mid]);
}
一个无序数组中的中位数 复杂度 O(n logn)
于 2021-11-03 15:25:14 首次发布