中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数

来源:互联网 发布:后期软件 油画质感 编辑:程序博客网 时间:2024/03/29 08:08

菜鸟一枚,记录下自己的程序,希望也可以帮助到其他人。

class Solution {
public:
int median(vector<int> &nums) {
        // write your code here
   
      int s=nums.size();
if(nums.empty())
return 0;
else if(s==1)
return nums[0];
        else if(s==2)
return nums[1];
else if(s==3)
return Median_three(nums,0,s-1);
else 
{ msort(nums,0,s-1);
    int m=nums[(s-1)/2];
// cout<<m<<endl;
    return m;
}
}

private:
  int Median_three(vector<int> &nums,int left,int right)
  {
 int center=(left+right)/2;
 
 if(nums[left]>nums[center])
 {
 swap(nums[left],nums[center]);
         
 }
 if(nums[left]>nums[right])
 {
 swap(nums[left],nums[right]);
 
 }
 if(nums[center]>nums[right])
 {
 swap(nums[center],nums[right]);
 
 }
 swap(nums[center],nums[right-1]);
 return nums[right-1];
  }


void msort(vector<int> &nums,int left,int right)
{
   int i,j;
if(left+3<=right)
{
i=left+1;
    j=right-2;
      while(i<j)
{
int pivot = Median_three(nums,left,right);    //返回最初的较为适当的枢纽元
while(nums[i]<pivot)
{
i++;
}
while(nums[j]>pivot)
{
  j--;
}
swap(nums[i],nums[j]);            //当上面两个循环结束时,执行这一步
i++;
j--;

}
swap(nums[i],nums[right-1]);
msort(nums,left,i-1);
msort(nums,i+1,j);
}
else  
{
int p,k,tmp;
for(p=0;p<nums.size();p++)
{
tmp=nums[p];
for(k=p;k>0 && nums[k-1]>tmp;k--)     //当p之前的数有大于nums[p]时
nums[k]=nums[k-1];
nums[k]=tmp;
}
}

}
 
};


0 0
原创粉丝点击