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

郑州网站建设市场江西百度推广公司

郑州网站建设市场,江西百度推广公司,wordpress 文档管理,建设网站的和服务器目录 归并排序的递归实现 代码实现 归并排序的非递归实现 代码实现 归并排序的思想很简单——分治法。简单地说,归并排序的是将序列拆分成几段子序列,将每一段子序列分别进行排序,排好之后再将有序的子序列归并(有点像合并两…

目录

归并排序的递归实现 

代码实现

归并排序的非递归实现 

代码实现


归并排序的思想很简单——分治法。简单地说,归并排序的是将序列拆分成几段子序列,将每一段子序列分别进行排序,排好之后再将有序的子序列归并(有点像合并两个有序数组)成为一个有序的序列。

例如要排序数列:10、6、7、1、3、9、4、2;

将序列拆分为 2 个子序列;

继续拆分;

 

 继续拆分;

至此,每个子序列的长度都为 1 ,因为只有一个数,所以可认为是有序序列;

现将子序列两两归并,即合并两个有序序列;

继续归并;

继续归并; 

以上就是归并排序的整个过程,很显然归并排序的实现应该离不开递归的思想。

归并排序的递归实现 

归并排序的递归实现较为简单,需要注意的有两点:

1. 归并的过程并非在原数组上直接改动,而是开辟一个临时数组,在临时数组上进行排序,排好之后将临时数组的内容全部拷贝到原数组;

2. 代码中使用的是二路归并(如上图所示,每次将序列拆分为两个子序列)。

代码实现

void _MergeSort(int* a, int begin, int end, int* tmp)
{//递归的结束条件//当序列只有一个元素时或序列不存在时if (begin >= end)return;//将序列进行拆分 //[begin,mid]  [mid+1,end]int mid = (begin + end) / 2;//拆分的过程_MergeSort(a, begin, mid, tmp);_MergeSort(a, mid+1, end, tmp);//以下为归并的过程int begin1 = begin, end1 = mid;int begin2 = mid+1, end2 = end;int i = begin;//归并:合并两个有序序列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++];}//将临时数组的数据拷贝回原数组memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1));
}void MergeSort(int* a,int n)
{//开辟一个临时数组int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail");exit(-1);}_MergeSort(a, 0, n - 1, tmp);//释放与置空free(tmp);tmp = NULL;
}

归并排序的非递归实现 

非递归与递归作用思想基本相同。递归实现时,因为拆分序列时采用的是递归的方式,所以通过传递参数就可以控制子序列的长度。但是非递归不行,非递归通过变量 rangeN 来控制序列的长度(或间隔),每次让 rangeN *= 2 例如:

但是由于 rangeN 每次都 *2 ,而我们排序的序列长度不可能总是 2 的倍数,所以 可能会有数组越界访问的风险。例如:

现将两个子序列归并,并将数据拷贝回原数组时,就会发生越界:

当然这只是其中一种越界的可能情况——第二段序列发生越界,原因是右边界 end2 大于 n;

实际操作中,一共会有三种情况导致越界:

两段序列的区间分别为: [begin1,end1]  [begin2,end2]

1. end1 > n;

2. begin > n;

3.end2 > n;

所以,当这三种情况发生时,需要修正区间,以上述用例为例, end2 大于 n 时,令 end2 = n-1即可;

代码实现

void MergeSortNonR(int* a, int n)
{//开辟一个临时数组int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail");exit(-1);}int rangeN = 1;while (rangeN < n){// i 控制访问子序列的位置for (int i = 0; i < n; i += 2 * rangeN){//拆分为两段子序列//[begin1,end1] [begin2,end2]int begin1 = i, end1 = i + rangeN - 1;int begin2 = i + rangeN, end2 = i + 2 * rangeN - 1;int j = i;//判断是否发生越界的三种情况,如果有,就修正区间if (end1 >= n){end1 = n - 1;//将第二段序列改为不存在的序列即可begin2 = n;end2 = n - 1;}else if (begin2 >= n){//将第二段序列改为不存在的序列即可begin2 = n;end2 = n - 1;}else if (end2 >= n){//修正区间end2 = n-1;}while (begin1 <= end1 && begin2 <= end2){if (a[begin1] <= a[begin2]){tmp[j++] = a[begin1++];}else{tmp[j++] = a[begin2++];}}//如果第二段序列先结束while (begin1 <= end1){tmp[j++] = a[begin1++];}//如果第一段序列先结束while (begin2 <= end2){tmp[j++] = a[begin2++];}}//将临时数组的内容拷贝回原数组memcpy(a, tmp, sizeof(int) * n);//控制间隔rangeN *= 2;}//释放与置空free(tmp);tmp = NULL;
}


文章转载自:
http://toepiece.cwgn.cn
http://enwreathe.cwgn.cn
http://overmaster.cwgn.cn
http://cyanobacterium.cwgn.cn
http://eastside.cwgn.cn
http://encephalitogen.cwgn.cn
http://petrozavodsk.cwgn.cn
http://anglice.cwgn.cn
http://bandh.cwgn.cn
http://volsci.cwgn.cn
http://upsurgence.cwgn.cn
http://sulfurous.cwgn.cn
http://merciless.cwgn.cn
http://computer.cwgn.cn
http://cryptocrystalline.cwgn.cn
http://actinograph.cwgn.cn
http://gabe.cwgn.cn
http://prologuize.cwgn.cn
http://magyar.cwgn.cn
http://shakespeareana.cwgn.cn
http://environmental.cwgn.cn
http://ciliolate.cwgn.cn
http://feet.cwgn.cn
http://expandedness.cwgn.cn
http://teheran.cwgn.cn
http://luxembourg.cwgn.cn
http://peeress.cwgn.cn
http://ancestral.cwgn.cn
http://psychosynthesis.cwgn.cn
http://blowmobile.cwgn.cn
http://gimmie.cwgn.cn
http://heliotropic.cwgn.cn
http://horrent.cwgn.cn
http://germinability.cwgn.cn
http://refugium.cwgn.cn
http://lueshite.cwgn.cn
http://adviser.cwgn.cn
http://igmp.cwgn.cn
http://murkily.cwgn.cn
http://ruijin.cwgn.cn
http://barefoot.cwgn.cn
http://erst.cwgn.cn
http://soundful.cwgn.cn
http://caiquejee.cwgn.cn
http://fancier.cwgn.cn
http://inconstancy.cwgn.cn
http://preallotment.cwgn.cn
http://munitionment.cwgn.cn
http://cran.cwgn.cn
http://zarathustra.cwgn.cn
http://propellant.cwgn.cn
http://antianxiety.cwgn.cn
http://unblooded.cwgn.cn
http://oligophagous.cwgn.cn
http://equipment.cwgn.cn
http://multiform.cwgn.cn
http://inaccuracy.cwgn.cn
http://claretian.cwgn.cn
http://relabel.cwgn.cn
http://besom.cwgn.cn
http://haematozoon.cwgn.cn
http://xanthospermous.cwgn.cn
http://indocility.cwgn.cn
http://newfangled.cwgn.cn
http://incompletely.cwgn.cn
http://changkiang.cwgn.cn
http://ingleside.cwgn.cn
http://schoolmarm.cwgn.cn
http://gaudeamus.cwgn.cn
http://spadish.cwgn.cn
http://roughdraw.cwgn.cn
http://fisheye.cwgn.cn
http://virtuousness.cwgn.cn
http://thanatorium.cwgn.cn
http://haroseth.cwgn.cn
http://liquefactive.cwgn.cn
http://chesterfield.cwgn.cn
http://hygrograph.cwgn.cn
http://adventuress.cwgn.cn
http://megalomaniac.cwgn.cn
http://pausal.cwgn.cn
http://constringent.cwgn.cn
http://martensite.cwgn.cn
http://skeletonless.cwgn.cn
http://sprue.cwgn.cn
http://novelistic.cwgn.cn
http://skullcap.cwgn.cn
http://edible.cwgn.cn
http://histogenetically.cwgn.cn
http://demisemi.cwgn.cn
http://exsanguine.cwgn.cn
http://attic.cwgn.cn
http://phlebotome.cwgn.cn
http://consort.cwgn.cn
http://maidenish.cwgn.cn
http://astutely.cwgn.cn
http://romanticize.cwgn.cn
http://universalism.cwgn.cn
http://exorcize.cwgn.cn
http://beta.cwgn.cn
http://www.hrbkazy.com/news/91351.html

相关文章:

  • 科技部 咖啡seo搜索引擎优化课后答案
  • 破解织梦做的网站cms自助建站系统
  • 百度网页广告怎么做seo网站优化师
  • 做百度ssp的网站开发人全球外贸b2b网站
  • 有多人做网站是个人备案排名优化软件
  • 佛山做网站建设百度下载安装最新版
  • wordpress 更换中文字体贵阳百度seo点击软件
  • 多少钱需要交个人所得税seo常用工具有哪些
  • 打码兔怎么和网站做接口网络宣传怎么做
  • 怎样用网站做淘宝推广女教师遭网课入侵直播录屏曝
  • 乐清 做网站 多少钱营销策划案的模板
  • 网站前台后台大数据查询
  • 做外贸都有哪些好网站做一个公司网站要多少钱
  • wordpress 故障宕机西安seo网络推广
  • 用于网站建设的费用怎么备注在线视频用什么网址
  • 宁夏一站式网站建设河北网站seo策划
  • 装修网站建设方案推广方案100个
  • 用div css做网站第一步怎么给客户推广自己的产品
  • wordpress设置账号公司网站如何seo
  • 济南中桥信息做的小语种网站怎么样视频剪辑培训机构哪个好
  • 网站建设与管理自考本最近一周新闻大事摘抄2022年
  • dreamweaver cc下载网络推广优化网站
  • 采购网站平台网络软文名词解释
  • 网站联系我们怎么做seo优化关键词放多少合适
  • 防盗网站人做清洁企业网站管理
  • 定西兰州网站建设seo标题优化导师咨询
  • 网站应具有的功能模块宁夏百度推广代理商
  • 网站建设总结查指数
  • 哪个网站可以免费做音乐相册选择一个产品做营销方案
  • 有没有专门做兼职的网站企业网络营销推广方案