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

想推网站目录源码wordpress修改页面样式表

想推网站目录源码,wordpress修改页面样式表,视频网站后台管理,某企业网站建设方案2000字目录 前言 递归实现 代码实现 非递归实现 代码实现 总结 前言 归并排序#xff08;Merge sort#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法#xff08;Divide and Conquer#xff09;的一个非常典型的应用。 作为一种典型的分而治之思想…目录 前言 递归实现 代码实现 非递归实现 代码实现 总结 前言 归并排序Merge sort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法Divide and Conquer的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用归并排序的实现由两种方法 自上而下的递归所有递归的方法都可以用迭代重写所以就有了第 2 种方法自下而上的迭代 和选择排序一样归并排序的性能不受输入数据的影响但表现比选择排序好的多因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。 递归实现 在我们前边的学习过程中例如合并两个有序数组等问题我们就使用过归并的思想本质上来说归并排序还是分治的思想将大问题化为小问题然后解决小问题最终是实现大问题的解决。 动图演示 归并排序的递归实现并不复杂有以下几个步骤 1.首先申请一段空间tmp用来保存以及排好序的部分数据当所有数据都排序完后重新拷贝回原数组。 2.对数组数据进行分割例如二叉树分为左右子树一样也将数组分割为左右数组知道左指针left大于等于右指针right时返回。 3.对以及递归好的数据进行排序两个区域内的数据进行比较小的数据插入到tmp数组中直至到数组的最后一个数据如果当一个数组提前结束直接将另外一个数组数据直接拷贝即可。 4.将排序好的tmp数组拷贝回原数组。 代码实现 由于原函数不适合递归所以我们定义子函数并且求出left和right进行递归将数组分为[left,mid]和[mid1,right]两个部分切记free我们申请的空间其余按照思路实现即可。 void _MergeSort(int* a, int left, int right, int* tmp) {if (left right)return;int mid left (right - left) / 2;_MergeSort(a, left, mid, tmp);_MergeSort(a, mid 1, right, tmp);int i left;int begin1 left, end1 mid;int begin2 mid 1, end2 right;while (begin1 end1 begin2 end2){if (a[begin1] a[begin2]){tmp[i] a[begin1];}else{tmp[i] a[begin2];}}while (begin1 end1){tmp[i] a[begin1];}while (begin2 end2){tmp[i] a[begin2];}for (int i left; i right; i){a[i] tmp[i];} } void MergeSort(int* a, int n) {int left 0;int right n - 1;int* tmp (int*)malloc(sizeof(int)*n);if (tmp NULL){perror(malloc fail);exit(-1);}_MergeSort(a, left, right, tmp);free(tmp);tmp NULL; } 非递归实现 归并的非递归实现起来比递归实现较难一点但是还是分治的思想只不过非递归有点类似于二叉树的后序遍历我们使用gap来控制每次归并时数组内数据个数例如第一次就是一个一个数据归并成两个数据的有序数组第二次使用两个数据的有序数组归并成四个数据的有序数组所以gap是由1开始并且每次乘2。 非递归实现就是在gap等于1时将整个数组元素排序成两个两个有序这个递归实现是不同的。 但是当我们每次将gap乘2时我们发现数组元素个数不一定是2的次方倍所以不进行处理时我们的数组一定会造成越界访问。 我们对每次要归并的数组第一个数组起始为begin1结束为end1第二个数组起始为begin2结束为end2所以就会有以下三种情况越界 1.end1越界即end1n。 2.begin2越界即begin2n。 3.end2越界即end2n。 所以我们要对边界进行修正当边界n时我们将其赋值为n-1修正如下 if (end1 n){end1 n - 1;}if (begin2 n){begin2 n;end2 n - 1;}if (end2 n){end2 n - 1;} 我们注意到当begin1n时我们将begin2 赋值为nend2赋值为n-1我们发现这样的话这段区间就不存在了这是为什么呢我们来探究一下。 我们对程序进行以上的处理发现程序崩溃了通过调试发现是tmp数组越界了那么tmp数组为什么会越界呢 通过测试发现本来只有十个数据所以下标最多到9但是tmp数组的下标10的位置插入元素导致越界这是因为当[begin2,end2]原本不存在但是我们修正让其存在[9,9]多插入一个数据所以导致越界所以我们做一下修改。 处理过后就没有下标的越界了。 代码实现 当我们解决这个问题之后其余代码按照思路实现就好了。 void MergeSortNonR(int* a, int n) {int* tmp (int*)malloc(sizeof(int) * n);if (tmp NULL){perror(maolloc fail);exit(-1);}int gap 1;while (gap n){for (int i 0; i n; i 2 * gap){int begin1 i, end1 i gap - 1;int begin2 i gap, end2 i 2*gap - 1;int InDex i;if (end1 n){end1 n - 1;}if (begin2 n){begin2 n;end2 n - 1;}if (end2 n){end2 n - 1;}/*printf([%d,%d] , begin1, end1);printf([%d,%d] , begin2, end2);*/while (begin1 end1 begin2 end2){//printf(%d , InDex);if (a[begin1] a[begin2]){tmp[InDex] a[begin1];}else{tmp[InDex] a[begin2];}}while (begin1 end1){//printf(%d , InDex);tmp[InDex] a[begin1];}while (begin2 end2){//printf(%d , InDex);tmp[InDex] a[begin2];}}for (int j 0; j n; j){a[j] tmp[j];}gap * 2;}free(tmp);tmp NULL; } 总结 我们今天讲解了归并排序的递归和非递归的实现方法码文不易希望可以对大家有所帮助。
http://www.w-s-a.com/news/691582/

相关文章:

  • 爱站网seo工具包互联网软件开发工程师
  • 百度站长工具平台登录郑州seo规则
  • 财税公司做网站精品建站教程
  • 建设区块链网站区块链开发平台有哪些
  • 青年人爱看的网站ie显示wordpress网页不完整
  • 优惠券推广网站怎么做青岛正规网站建设哪家便宜
  • 怎么搞一个服务器建设网站wordpress页眉编辑
  • 计算机企业网站建设论文流量平台是什么意思
  • 成都建设网站公司哪家好上海有名的广告公司
  • 收录优美图片找不到了整站seo优化一般多少钱
  • 大型网站建设哪家好汉川网页设计
  • 深圳品牌策划公司推荐南昌网站怎么做seo
  • 滨州做微商城网站备案时暂时关闭网站
  • 手机网站样式代码网站是怎样制作的
  • 任务发布网站建设苏州园区房价
  • 网站的认识知识付费做的最好的平台
  • 企业电子商务网站设计的原则深圳的网站建设公司怎么样
  • 个人网站趋向wordpress图片搬家
  • 做空压机网站的公司有哪些wordpress 外部链接
  • 网站建设管理成本估计小红书推广平台
  • 一级a做爰片免费观看网站焦作建设企业网站公司
  • 欧阳网站建设2022华为云营销季
  • 快速学做网站高水平的大连网站建设
  • 专业做房地产网站建设wordpress侧面小工具
  • 旅游网站开发的重要性wordpress添加广告插件
  • 关于网站建设管理工作的报告婚纱网站php
  • 东莞市建设培训中心网站那个网站可以看高速的建设情况
  • 网站开发工具安卓版专业小程序商城开发
  • 网站不备案影响收录吗深圳住房网站app
  • 交网站建设域名计入什么科目开发平台教程