算法实验之分治法求中位数
来源:互联网 发布:统一网关网络加速器 编辑:程序博客网 时间:2024/06/05 08:30
利用分治策略试设计一个O (log n)时间的算法求出这2n个数的中位数。
要输入的内容在文件1.txt中,输出的结果在文件2.txt中。
- #include<iostream>
- #include<fstream>
- using namespace std;
- template <class T>
- T mid(T *a,T *b,int len)
- {
- if(len==1)
- return *a<*b?*a:*b;
- if(len==2)
- {
- int temp=*a>=*b?*a:*b;
- if(temp==*a)
- return temp<*(b+1)?temp:*(b+1);
- else
- return temp<*(a+1)?temp:*(a+1);
- }
- int n;
- if(len%2==0)
- n=len/2;
- else
- n=len/2+1;
- if(*(a+n-1)==*(b+n-1))
- return *(a+n-1);
- else if(*(a+n-1)<*(b+n-1))
- return mid(a+n-1,b,n);
- else if(*(a+n-1)>*(b+n-1))
- return mid(a,b+n-1,n);
- }
- int main()
- {
- int a[5];
- int b[5];
- ifstream f1("1.txt");
- ofstream f2("2.txt");
- int len;
- f1>>len;
- for(int i=0;i<len;i++)
- f1>>a[i];
- for(i=0;i<len;i++)
- f1>>b[i];
- int *pa=a;
- int *pb=b;
- int m=mid(pa,pb,len);
- cout<<m<<endl;
- f2<<m;
- f1.close();
- f2.close();
- return 1;
- }
运行结果:
- 算法实验之分治法求中位数
- 算法实验之分治法求中位数
- 分治算法求两数组中位数
- 求两个等长有序数组的中位数的logN算法 分治法
- 求两个等长有序数组的中位数的logN算法 分治法
- 求两个等长有序数组的中位数的logN算法 分治法
- 一次求两序列中位数分治算法探索历程
- 分治法求 两个数组 X 和 Y 的中位数
- 分治算法之找出2n个数的中位数
- 分治算法之求逆序对数
- 算法之分治法
- 算法之分治法
- 分治法求和-算法设计实验2
- 【算法】【分治】两个排序数组的中位数
- 【leetcode4】用分治算法计算中位数问题
- 算法 分治法求矩阵的乘积
- 多种排序算法求中位数
- 求中位数,快速选择算法
- 《乔布斯传》经典摘录之iphone【天线门】事件一(源起)(十一)
- 算法实验之动态规划
- 关于DLL劫持的一篇文章
- UML类图关系大全
- POJ 3164 最小树形图 朱刘算法
- 算法实验之分治法求中位数
- 《乔布斯传》经典摘录之iphone【天线门】事件二(解决、总结、分析)(十二)
- 那些年谁陪我一起...
- Java学习笔记2——命令行模式下与程序互动
- TCP/IP 协议 TCP TIME_WAIT状态(2MSL)
- Oracle游标
- Unity3D优化之Modeling Characters for Optimal Performance
- LAMP 配置
- 更换MYSQL datadir数据路径发生的错误