减治法求解两个升序数组的中位数
2017-03-30 18:22
169 查看
#include<iostream> using namespace std; int SearchMid(int a[],int b[],int n){ int s1=0,e1=n-1,s2=0,e2=n-1; //初始化两个序列的上下界 int mid1,mid2; while(s1<e1 && s2<e2){ //循环直到区间只有一个元素 mid1=(s1+e1)/2; //序列a的中位数的下标 mid2=(s2+e2)/2; //序列b的中位数的下标 if(a[mid1]==b[mid2]){ //当a和b序列的中位数相等时,即为两序列的中位数 return a[mid1]; } if(a[mid1]<b[mid2]){ if((s1+e1)%2==0) s1=mid1; else s1=mid1+1; //保证a,b序列的长度相等 e2=mid2; }else{ if((s2+e2)%2==0) s2=mid2; else s2=mid2+1; //保证a,b序列的长度相等 e1=mid1; } } if(a[s1]<b[s2]) return a[s1]; else return b[s2]; } int main(){ int n; cout<<"请输入序列的长度:"; cin>>n; int *a=new int ; int *b=new int ; cout<<"请输入第一个序列:"<<endl; for(int i=0;i<n;i++){ cin>>a[i]; } cout<<"请输入第二个序列:"<<endl;; for(int i=0;i<n;i++){ cin>>b[i]; } float mid=SearchMid(a,b,n); cout<<"中位数:"<<mid<<endl; system("pause"); }
相关文章推荐
- 分治法求解两个升序数组的中位数
- 【LeetCode 4. Median of Two Sorted Arrays】两个有序数组的中位数求解
- 两个升序数组的中位数
- 两个有序数组的中位数求解方法
- 算法 - 有两个相同大小数组均已按升序排列好,编程计算这两个数组的中位数(C++)
- 两个有序数组求解下中位数
- 求两个长度相同的升序数组的中位数
- 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
- 时间和空间复杂度最少的求两个升序数组的中位数
- 求解两个有序数组的中位数
- 找出升序数组中和为给定值的两个数字
- 求两个有序数组的中位数
- 【雅虎笔试题】两个已经排好序的数组,找中位数
- 一个整型数组中数字出现两次,但是只有2个数字出现一次,求解这两个只出现一次的数的代码
- 两个排序数组的中位数
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 利用分治法来求两个排序数组的中位数
- 【剑指offer】【41】找出升序数组中和为给定值的两个数字
- 两个数组合并、去重、升序
- 【雅虎笔试题】两个已经排好序的数组,找中位数