当前位置: 首页 > news >正文

宁夏建设注册中心网站仿淘宝网站制作

宁夏建设注册中心网站,仿淘宝网站制作,wordpress安装2个网站,东莞开发方案公司一个长度为n(n⩾1)的升序序列S,处在第2n​个位置的数称为序列S的中位数(median number),例如#xff0c;序列S1{10,13,14,16,18,19}的中位数是14。两个序列的中位数是它们所有元素的升序序列的中位数#xff0c;例如#xff0c;S2{2,4,8,9,20,21},则S1和S2的中位数是13。现有… 一个长度为n(n⩾1)的升序序列S,处在第2n​个位置的数称为序列S的中位数(median number),例如序列S1{10,13,14,16,18,19}的中位数是14。两个序列的中位数是它们所有元素的升序序列的中位数例如S2{2,4,8,9,20,21},则S1和S2的中位数是13。现有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法找出两个序列的中位数。 输入格式: 输入在三行进行第一行1个非负整数N表示两个数列的长度,第二行和第三行每行N个非负整数数与数之间用空格间隔。 输出格式: 在一行内输出一个整数。 输入样例: 6 8 11 14 15 17 19 2 4 6 9 10 12 输出样例: 10 方法一探索使用二分搜索算法找到两个排序数组的中位数 在本篇博客中我们将探讨一个使用二分搜索算法来找到两个排序数组的中位数的C程序。我们将在代码中提供详细的解释和注释以帮助读者理解每一步的目的。 #include stdio.hint main() {// 读取输入的整数nint n;scanf(%d, n);// 定义两个长度为n的数组a和bint a[n], b[n];// 循环读取n个整数到数组a中for (int i 0; i n; i){scanf(%d, a[i]);}// 循环读取n个整数到数组b中for (int i 0; i n; i){scanf(%d, b[i]);}// 初始化四个指针l1, r1, l2, r2int l1 0, r1 n - 1, l2 0, r2 n - 1;// 使用二分搜索找到两个数组的中位数while (l1 r1 || l2 r2){int mid1 (l1 r1) 1; // 计算数组a的中间位置int mid2 (l2 r2) 1; // 计算数组b的中间位置// 如果两个中间位置的元素相等那么这个元素就是中位数if (a[mid1] b[mid2]){printf(%d, a[mid1]);return 0;}else if (a[mid1] b[mid2]) // 如果a的中位数小于b的中位数{if ((l1 r1) % 2 0) l1 mid1; // 更新a的左边界else l1 mid1 1; // 更新a的左边界r2 mid2; // 更新b的右边界}else // 如果a的中位数大于b的中位数{if ((l2 r2) % 2 0) l2 mid2; // 更新b的左边界else l2 mid2 1; // 更新b的左边界r1 mid1; // 更新a的右边界}}// 打印两个数组合并后的中位数printf(%d, a[l1] b[l2] ? a[l1] : b[l2]);return 0; } 上面的代码是用来找到两个有序数组a和b的中位数的算法。代码的运行逻辑如下         1. 首先从标准输入中读取整数n表示数组a和b的长度。         2. 然后定义了两个长度为n的数组a和b分别用来存储输入的整数。         3. 接着使用循环分别读取n个整数到数组a和数组b中。         4. 初始化四个指针l1、r1、l2、r2分别表示数组a和数组b的左右边界。         5. 使用二分搜索的思想通过不断缩小搜索范围找到两个数组的中位数。         6. 在循环中首先计算数组a和数组b的中间位置mid1和mid2。         7. 如果a[mid1]等于b[mid2]则直接打印出中位数并结束程序。         8. 否则如果a[mid1]小于b[mid2]则更新a的左边界和b的右边界以缩小搜索范围。         9. 如果a[mid1]大于b[mid2]则更新b的左边界和a的右边界以缩小搜索范围。        10. 最后打印出两个数组合并后的中位数即a[l1]和b[l2]中的较小值。         这样就完成了找到两个有序数组的中位数的过程。 方法二使用快速排序算法找到排序数组的中位数 #includestdio.h #includestdlib.h// cmp函数用于快速排序 int cmp(const void* a,const void* b) {// 比较两个整数的大小return *(int*)b - *(int*)a; }int main() {int n;int a[1000001];// 从标准输入中读取一个整数nscanf(%d,n);// 循环读取2n个整数到数组a中for(int i0;in*2;i){scanf(%d,a[i]);}// 使用快速排序对数组a进行排序qsort(a,n*2,sizeof(a[0]),cmp);// 打印排序后的数组a的中位数printf(%d\n,a[n]);return 0; } 上面的代码是用来找到两个有序数组a和b的中位数的快速排序算法。代码的运行逻辑如下         1. 首先从标准输入中读取整数n表示数组a和b的长度。         2. 然后定义了一个长度为2n的数组a用来存储输入的2n个整数。         3. 接着使用循环分别读取2n个整数到数组a中。         4. 使用快速排序函数qsort对数组a进行排序排序的方式是按照从大到小的顺序排列。         5. 最后打印出排序后的数组a的中位数即a[n]。 qsort()函数是C语言标准库中提供的快速排序函数其函数原型如下 void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); qsort()函数的参数说明如下         1. base指向要排序的数组的首元素的指针。         2. nmemb要排序的元素个数。         3. size每个元素的大小以字节为单位。         4. compar比较函数用于确定元素之间的相对顺序。该函数指针指向一个比较函数该函数接受两个指向常量对象的指针然后返回一个整数值表示两个指针所指向的元素的相对顺序。         快速排序是一种常见的排序算法其基本思想是通过分治的方式将一个大问题分解成若干个小问题然后递归地解决这些小问题。快速排序的具体实现步骤如下         1. 首先选择一个基准元素一般选择第一个或最后一个元素。         2. 然后将待排序的元素分成两部分一部分比基准元素小一部分比基准元素大。         3. 对这两部分元素分别进行递归排序。         4. 最后将排序后的两部分元素合并起来。 快速排序的时间复杂度为O(nlogn)其中n为待排序元素的个数。大家可以先看看后期我会出一期快速排序函数的题集当然得在我学习完之后。
http://www.w-s-a.com/news/363437/

相关文章:

  • 想象力做网站网站301跳转代码
  • 做暧暧小视频有声音的网站太原网页搜索排名提升
  • 公众号链接的手机网站怎么做动易2006学校网站
  • 网站网上推广网站推他网站
  • 如何进行网站建设分析济宁做企业网站
  • 长沙网站seo技巧wordpress插件头像
  • appserv做网站教程微信信息流广告案例
  • 前端网站开发兼职长春火车站地下停车场收费标准
  • 苏州推广网站建设概况大连公交app
  • 移动互联网站开发与维护招聘网站建设计入什么费用
  • 郑州营销型网站建设erp系统有什么用
  • 公司网站开发费怎么入账投放广告网站
  • 企业网站开发文献综述加盟网网站建设策划书
  • 最便宜的网站空间网站建设和app开发
  • 承装承修承试材料在哪个网站做如何用虚拟主机建设网站
  • 如何建一个外贸网站网页设计零基础学习课程
  • 营销型外贸网站广州昆明建设网站制作
  • 网页制作网站素材项目建设全过程管理
  • 正能量网站下载柬埔寨网赌网站开发
  • 如何免费建设公司网站广州传业建设有限公司网站
  • 织梦做的网站快照被攻击张家口网站建设公司
  • 平顶山公司网站建设南昌网站seo多少钱
  • 网站开发要先买服务器吗建设婚恋网站用什么搭建
  • 我想自己在网站上发文章 怎样做wordpress站点安装
  • 北京模板网站开发全包昆明网站开发正规培训
  • 西咸新区建设环保网站谷歌风格wordpress
  • 嘉兴港区建设局网站2018年网站开发
  • 网站里图片做超链接专业开发网站报价单
  • server2003网站建设做销售记住这十句口诀
  • microsoft免费网站网站后台登陆路径