查找一个无序数组的中位数
public static void main(String[] args) {
int[] nums = {7, 1,2, 3, 8,9,10};
int res = getMedian(nums);
System.out.println(res);
}
public static int getMedian(int[] nums) {
return partition(nums, 0, nums.length - 1);
}
private static int partition(int[] nums, int start, int end) {
/***快排partition函数原代码——start***/
int left = start;
int right = end;
int point = nums[start];
while (left < right) {
while (left < right && nums[right] >= point) {
right--;
}
//循环完之后,left 所在位置,的元素比point 要小
while (left < right && nums[left] <= point) {
left++;
}
if (left < right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
}
//循环完之后left 和 right 的元素
//left 和 right 的值相同。
//并 nums[left] 肯定是小于 point 的取值的。
nums[start] = nums[left];
nums[left] = point;
/***快排partition函数原代码——end***/
/***定位判断***/
根据不同的 标准,可以设置不同的中位数
if (left == (nums.length - 1) / 2) {
return nums[left];
} else if (left > (nums.length - 1) / 2) {
return partition(nums, start, left - 1);
} else {
return partition(nums, left + 1, end);
}
}