问题描述:
给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
样例:给出数组[4, 5, 1, 2, 3], 返回 3;给出数组[7, 9, 4, 5],返回 5
public static int median(int[] nums){
if(nums==null||nums.length==0){
return 0;
}
//pos用于表示每一次遍历的起始比较位置
int pos=0;
//temp用于保存将要插入的数字
int temp=0;
//插入排序法
for(int i=1;i<nums.length;i++){
pos=i-1;
temp=nums[i];
while(pos>=0&&temp<nums[pos]){
nums[pos+1]=nums[pos];
pos--;
}
nums[pos+1]=temp;
}
//这主要是因为nums的下标是从0开始的
//如果nums长度为偶数,则返回nums.length/2-1处的数字;
if(nums.length%2==0){
return nums[nums.length/2-1];
}
//如果nums长度为奇数,则返回nums.length/2处的数字;
return nums[nums.length/2];
}