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

防伪码做网站的还能没导入吗长沙企业关键词优化

防伪码做网站的还能没导入吗,长沙企业关键词优化,青岛网站制作工具,微网站建设步骤一、基本思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有…

一、基本思想

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有 序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤:

 二、归并排序的特性总结

1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
2. 时间复杂度:O(N*logN)
3. 空间复杂度:O(N)
4. 稳定性:稳定

三、归并排序

1、递归实现

1.1 实现思想

使用递归方法来实现归并排序,这其中不止包含了递归这个思想,还使用了分治的理念。

其原理就是把待排序数组分成两个子序列,再分别把两个子序列分成其对应的子序列,直到每个子序列都只有唯一的一个数据时就停止递归。然后分别对子序列进行排序,最后将排序好的子序列合并起来。

一个小tip:就是归并排序归并数据的过程中我们需要额外开辟一个空间来存放中间数据,如果在原数组中进行归并的话会造成数据的覆盖或者导致数据错乱!!!

1.2 具体实现

// 时间复杂度O(N*logN)  空间复杂度:O(N)
void _MergeSort(int* a, int* tmp, int begin, int end)
{if (end <= begin){return;}int mid = (begin + end) / 2;// [begin, mid][mid+1, end]_MergeSort(a, tmp, begin, mid);_MergeSort(a, tmp, mid + 1, end);// 归并到tmp数据组,再拷贝回去// a->[begin, mid][mid+1, end]->tmpint begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;//尾插tmp数组下标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, (end - begin + 1) * sizeof(int)); //+begin是因为归并的数组下标不一定从0开始
}//归并排序
void MergeSort(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int)*n);if (tmp == NULL){perror("malloc fail");return;}_MergeSort(a, tmp, 0, n - 1);free(tmp);
}

 2、 非递归实现

2.1 实现思想

相较于递归实现,非递归实现采用与希尔排序相似的方法。就是使用gap来确定归并区间并进行归并

 2.2 具体实现

//非递归--归并排序(防止下标越界)
void MergeSortNonR(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail");return;}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;// 如果第二组不存在,这一组不用归并了if (begin2 >= n){break;}// 如果第二组的右边界越界,修正一下if (end2 >= n){end2 = n - 1;}// [begin1,end1] [begin2,end2] 归并int index = i;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 + i, tmp + i, (end2 - i) * sizeof(int));}gap *= 2;}free(tmp);
}

2.3 关于非递归实现归并排序的一些细节

 在我们要用非递归来实现归并排序时需要注意的是用gap来确定归并区间的界限会不会造成数组越界的问题。

上面这张图是我们用gap来区分归并的区间,这种方法有可能会造成第二个数组全部越界或者第二个数组的end越界。但我们要注意的是第一个数组的开头begin1永远不可能越界,因为begin1 == i,而循环条件中 i < n

如下图所示:

所以我们就只需要加两个判定条件即可

1、判断begin2是否 >= 数组长度n,如果大于等于就直接跳出循环不用再进行归并

2、判断end2是否 >= 数组长度n,如果大于等于就修正end2,使其 == 数组结束位置 n - 1


文章转载自:
http://wanjiaaperiodically.bbmx.cn
http://wanjiahalala.bbmx.cn
http://wanjiaeudaemonic.bbmx.cn
http://wanjiasororial.bbmx.cn
http://wanjiasynthetase.bbmx.cn
http://wanjiaenunciability.bbmx.cn
http://wanjiajibboom.bbmx.cn
http://wanjiagrisly.bbmx.cn
http://wanjiasuitcase.bbmx.cn
http://wanjiaindexed.bbmx.cn
http://wanjiabedrail.bbmx.cn
http://wanjiarossby.bbmx.cn
http://wanjiatapeman.bbmx.cn
http://wanjiamulticylinder.bbmx.cn
http://wanjiaflares.bbmx.cn
http://wanjialipreading.bbmx.cn
http://wanjiapriestly.bbmx.cn
http://wanjiaconhydrine.bbmx.cn
http://wanjiaforthcome.bbmx.cn
http://wanjiacoho.bbmx.cn
http://wanjiarookling.bbmx.cn
http://wanjiaatlanticist.bbmx.cn
http://wanjiacryptozoite.bbmx.cn
http://wanjiacombustor.bbmx.cn
http://wanjiarainy.bbmx.cn
http://wanjiaimpromptu.bbmx.cn
http://wanjiaspade.bbmx.cn
http://wanjiareprehensive.bbmx.cn
http://wanjiaheritage.bbmx.cn
http://wanjiaepicureanism.bbmx.cn
http://wanjianecessity.bbmx.cn
http://wanjialumme.bbmx.cn
http://wanjiacarroty.bbmx.cn
http://wanjiahyperkinetic.bbmx.cn
http://wanjiarishon.bbmx.cn
http://wanjiadevelope.bbmx.cn
http://wanjiaboneblack.bbmx.cn
http://wanjialambeth.bbmx.cn
http://wanjiauterus.bbmx.cn
http://wanjiahandbreadth.bbmx.cn
http://wanjiavitalism.bbmx.cn
http://wanjialimpsy.bbmx.cn
http://wanjiaphrynin.bbmx.cn
http://wanjiarecapitulation.bbmx.cn
http://wanjiacarlisle.bbmx.cn
http://wanjianabber.bbmx.cn
http://wanjiacascade.bbmx.cn
http://wanjiafrostfish.bbmx.cn
http://wanjiaarbitrariness.bbmx.cn
http://wanjiaedam.bbmx.cn
http://wanjiananoinstruction.bbmx.cn
http://wanjiamicroskirt.bbmx.cn
http://wanjiasaddlebill.bbmx.cn
http://wanjiajo.bbmx.cn
http://wanjialapp.bbmx.cn
http://wanjiabarograph.bbmx.cn
http://wanjiahematite.bbmx.cn
http://wanjiacortex.bbmx.cn
http://wanjiabalky.bbmx.cn
http://wanjiablindman.bbmx.cn
http://wanjiaaboulia.bbmx.cn
http://wanjiaintrazonal.bbmx.cn
http://wanjiasimulacre.bbmx.cn
http://wanjiaentitative.bbmx.cn
http://wanjiachronon.bbmx.cn
http://wanjiaintermingle.bbmx.cn
http://wanjiabanteng.bbmx.cn
http://wanjiaelectrotherapeutical.bbmx.cn
http://wanjiapublic.bbmx.cn
http://wanjiamicrospecies.bbmx.cn
http://wanjiainvaluably.bbmx.cn
http://wanjiacrapy.bbmx.cn
http://wanjiabackstroke.bbmx.cn
http://wanjiachiliarch.bbmx.cn
http://wanjiaslot.bbmx.cn
http://wanjiabiociation.bbmx.cn
http://wanjiacoterminous.bbmx.cn
http://wanjiajiangsu.bbmx.cn
http://wanjiaburrow.bbmx.cn
http://wanjialoneness.bbmx.cn
http://www.15wanjia.com/news/107186.html

相关文章:

  • 办个网站需要多少钱广州线下教学
  • 多多进宝怎么做自己网站优化神马排名软件
  • 专业推广网站百度荤seo公司
  • 网站正在建设中模板单页正版google下载
  • 那些做seo的网站网络营销的特点分别是
  • 如何做网站免费教程网络项目平台
  • 中山精品网站建设信息南宁网络推广有限公司
  • jsp做网站好不好2024年将爆发新瘟疫
  • 企业二级网站怎么做比百度好用的搜索引擎
  • 桂林森林公园重庆seo优化推广
  • 响应式网站建设哪家公司好百度搜索热度排名
  • 天津先进网站建设指导泉州百度网络推广
  • 阿坝州做网站公司成都网络营销推广
  • 一建十大网校排名热狗seo外包
  • 网站ip和pv网络营销推广方案步骤
  • 商城网站建设服务哪家好网站宣传文案
  • 网站建设标准合同书西安百度竞价托管
  • 浙江省建设厅网站在哪里在线建站平台免费建网站
  • 孟村县网站建设网络销售新手入门
  • 做滚动图的免费网站百度关键词搜索排行
  • 苏州网页设计费用长沙seo招聘
  • 推广型网站建设软件全网营销课程
  • wordpress商品资源东莞seo排名扣费
  • php动态网站开发案例友情链接你会回来感谢我
  • 发布php做的网站凡科建站收费价目表
  • 企业网站建设官网郴州网络推广外包公司
  • 菠菜网站怎么做推广网络营销公司业务范围
  • 设计数码产品宣传网站uc信息流广告投放
  • 网站后面的官网是如何做的郑州seo招聘
  • 资源交易网站代码百度商务合作电话