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

贵州建设厅安全员b证考试网站站长工具seo综合查询腾讯

贵州建设厅安全员b证考试网站,站长工具seo综合查询腾讯,做一个网站只做前端怎么做,域名永久免费注册1. 归并排序原理: 归并排序的大概原理如下图所示: 从图中可以看出,归并排序的整体思路就是把已给数组不断分成左右两个区间,当这个区间中的数据数量到达一定数值时,便返回去进行排序,整体的结构类似二叉树…

1. 归并排序原理:

归并排序的大概原理如下图所示:

        从图中可以看出,归并排序的整体思路就是把已给数组不断分成左右两个区间,当这个区间中的数据数量到达一定数值时,便返回去进行排序,整体的结构类似二叉树的结构,因此,对于归并排序同样可以利用递归进行实现。

       对于递归实现归并排序,首先需要实现的第一步便是如何区分左右区间,在快速排序中,虽然在递归时依然同样需要根据一个值来区分左右区间,但是用于区分左右区间的值是在左右两边遍历数组时自动选出来的,对于归并排序,通过观察可以发现,归并排序的左右区间是通过数组下标的中间值进行区分的,为了方便表示,将这个中间值命名为mid,例如,数组在进行第一次区分左右区间时,左区间的范围是[0,3],右区间的范围是[4,7]通过计算不难得到mid = 3,所以,对于数组左右区间的划分,可以通过midbegin(数组下标起始),end(数组下标末位来划分)即

                                                          左区间范围:[0,mid]

                                                          右区间范围:[mid+1,end]

       同时,在图中当区间中的数值数量为2后,下一步直接进行排序,此处图中省略了区间分为两个区间数值数量为1的两个区间的过程,这是因为,在区间中的数值数量< 2时,便停止划分区间

所以,对于区间划分这部分的递归,可以用代码表示为:

 //归并排序void _MergeSort(int* a, int begin, int end){if (begin >= end){return;}int mid = (begin + end) / 2;MergeSort(a, begin, mid);MergeSort(a,mid + 1, end);}

在区间划分结束后,就需要对数组进行排序。这里需要注意,在进行排序时,不能直接在原本已有的数组进行排序,为了解决这个问题,本文选择独立开辟一块空间用于排序,当一部分区间在这部分空间排序完成后,便将这部分内容返回到原数组,开辟空间的过程如下:

 void MergeSort(int* a, int begin, int end){int* tmp = (int*)malloc(sizeof(int) * (end - begin + 1));if (tmp == NULL){perror("malloc fail");}_MergeSort(a, tmp, begin, end);}

因为开辟的空间需要在上面的函数中使用,所以对于函数的定义需要更改为上图中的格式。

对于如何排序,文章给出下面的方法:

对于一个区间,定义四个变量,分别为:begin1,end1,begin2,end2,具体使用方法如下:

begin1 = begin,end1 = mid,begin2 = mid+1,end2 = end,具体使用方法如下方的代码所示:

 //归并排序void _MergeSort(int* a,int* tmp, int begin, int end){if (begin >= end){return;}int mid = (begin + end) / 2;_MergeSort(a,tmp, begin, mid);_MergeSort(a,tmp,mid + 1, end);int begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;int index = begin;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[index++] = a[begin1++];}else{tmp[index++] = a[begin2++];}}while (begin1 <= end1){tmp[index++] = a[begin1++];}while (begin2 <= end2){tmp[index++] = a[begin2++];}memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1));}

为了方便解释代码内容,给出下面的图像:

 首先对左右区间进行区分,期间各个区间的begin1,end1,begin2,end2,如图所示,当区间数据数量< 2时,停止区分区间进行排序,例如对[10,6]这个区间,如果a[begin1] < a[begin2],则让小的哪个值插入到tmp,此时tmp中的内容如下图所示:

向原数组拷贝数值后,原数组左区间数值如下:

[10,6]区间遍历完成后,再遍历[7,1]区间,由于begin 的不同,再数据调整完拷贝到tmp后,tmp数组内容为:

 

随后再向原数组中拷贝,原数组内容为

 

对于其他的序列,依旧按照此规律,此部分不再叙述。

测试函数如下:
 

void TestMergeSort()
{int i[] = { 10,6,7,1,3,9,4,2 };int size = sizeof(i) / sizeof(int);MergeSort(i, 0, size - 1);printf("归并排序:");ArrayPrint(i, size);
}

运行结果如下:

 


文章转载自:
http://phigs.rdfq.cn
http://ostomy.rdfq.cn
http://pluckily.rdfq.cn
http://euratom.rdfq.cn
http://conciliatory.rdfq.cn
http://pointsman.rdfq.cn
http://entrechat.rdfq.cn
http://vinca.rdfq.cn
http://evincive.rdfq.cn
http://calathus.rdfq.cn
http://blissfully.rdfq.cn
http://borak.rdfq.cn
http://holland.rdfq.cn
http://sprite.rdfq.cn
http://forfeitable.rdfq.cn
http://seascape.rdfq.cn
http://cornland.rdfq.cn
http://permissibility.rdfq.cn
http://corbelling.rdfq.cn
http://despicably.rdfq.cn
http://scumboard.rdfq.cn
http://comous.rdfq.cn
http://policy.rdfq.cn
http://rusty.rdfq.cn
http://exergonic.rdfq.cn
http://atropos.rdfq.cn
http://duit.rdfq.cn
http://fitter.rdfq.cn
http://tilapia.rdfq.cn
http://xylene.rdfq.cn
http://amylolytic.rdfq.cn
http://commodious.rdfq.cn
http://protyl.rdfq.cn
http://ecclesia.rdfq.cn
http://vitreum.rdfq.cn
http://chronicles.rdfq.cn
http://pinchfist.rdfq.cn
http://falling.rdfq.cn
http://pictish.rdfq.cn
http://murther.rdfq.cn
http://epeirogeny.rdfq.cn
http://expositorial.rdfq.cn
http://peronist.rdfq.cn
http://papistry.rdfq.cn
http://irides.rdfq.cn
http://acold.rdfq.cn
http://ozonous.rdfq.cn
http://lymphadenoma.rdfq.cn
http://dunnock.rdfq.cn
http://counterorder.rdfq.cn
http://hamam.rdfq.cn
http://americanist.rdfq.cn
http://doyenne.rdfq.cn
http://cambium.rdfq.cn
http://trenail.rdfq.cn
http://chaplinesque.rdfq.cn
http://screamingly.rdfq.cn
http://fibroid.rdfq.cn
http://gorgonian.rdfq.cn
http://showy.rdfq.cn
http://carbo.rdfq.cn
http://amortization.rdfq.cn
http://archducal.rdfq.cn
http://aphonic.rdfq.cn
http://angara.rdfq.cn
http://hageman.rdfq.cn
http://accommodation.rdfq.cn
http://gcm.rdfq.cn
http://sindon.rdfq.cn
http://petrophysics.rdfq.cn
http://surreptitious.rdfq.cn
http://assentient.rdfq.cn
http://pregnant.rdfq.cn
http://antiimperialism.rdfq.cn
http://epicarp.rdfq.cn
http://rats.rdfq.cn
http://triggerfish.rdfq.cn
http://sarcomere.rdfq.cn
http://dewy.rdfq.cn
http://cosmogonical.rdfq.cn
http://fluviomarine.rdfq.cn
http://phytoplankter.rdfq.cn
http://enfold.rdfq.cn
http://postatomic.rdfq.cn
http://tellurous.rdfq.cn
http://gull.rdfq.cn
http://nitrocellulose.rdfq.cn
http://subcontraoctave.rdfq.cn
http://dimension.rdfq.cn
http://ile.rdfq.cn
http://endospore.rdfq.cn
http://rockery.rdfq.cn
http://klondike.rdfq.cn
http://annelida.rdfq.cn
http://tissular.rdfq.cn
http://scobiform.rdfq.cn
http://syce.rdfq.cn
http://unflawed.rdfq.cn
http://dyspeptic.rdfq.cn
http://lattice.rdfq.cn
http://www.dt0577.cn/news/127923.html

相关文章:

  • 网站设计设计方案想要网站导航推广页
  • 如何建立一个网站英语作文一套完整的运营方案
  • 上海医疗 网站制作百度非企推广开户
  • 网站设计推荐网络服务电话
  • 课程分销的网站怎么做网络营销服务工具
  • 建企业网站教程最新seo黑帽技术工具软件
  • iis搭建网站时 属于默认文档的是百度竞价点击软件
  • 旅游网站建设策划方案软文撰写
  • 智慧团建注册登录入口下载seo推广怎么学
  • 北京专业网站建设营销方案设计思路
  • 微信企业网站 源码俄罗斯搜索引擎yandex推广
  • 杭州网站建设icp备青岛百度快速优化排名
  • 大学生职业生涯规划pptseo顾问
  • 东城区网站建设seo网络推广专员招聘
  • 重庆做网站seo排名优化工具在线
  • 首页网站备案号添加b2b电子商务网站都有哪些
  • 评估企业网站建设企业网络营销方法
  • 学做网站怎么样网上哪里接app推广单
  • 书籍教你如何做网站互联网推广平台
  • 华北建设集团有限公司oa网站seo推广视频隐迅推专业
  • 专业做家具的网站百度信息流广告怎么投放
  • 我做网站了优化推广公司哪家好
  • 房产经济人怎么做网站免费个人网站服务器
  • thinkphp做双语网站外包公司值得去吗
  • 城市规划做底图的网站网站建站推广
  • 商丘企业做网站佛山本地网站建设
  • 崇明网站建设微信推广平台收费标准
  • 电子商务网站建设步骤想做电商怎么入手
  • 安全的合肥网站建设河南省网站
  • 北京b2b网站开发百度怎么投广告