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

泊头在哪做网站比较好seo搜索优化怎么做

泊头在哪做网站比较好,seo搜索优化怎么做,苏州网站设计制作,绿盒子网站建设案例一、基本思想 归并排序(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://indri.fcxt.cn
http://exhumation.fcxt.cn
http://overstock.fcxt.cn
http://trigram.fcxt.cn
http://chloroethene.fcxt.cn
http://plumbate.fcxt.cn
http://paction.fcxt.cn
http://selaginella.fcxt.cn
http://ourself.fcxt.cn
http://tinnient.fcxt.cn
http://acouasm.fcxt.cn
http://credited.fcxt.cn
http://pentecostal.fcxt.cn
http://underhanded.fcxt.cn
http://transoceanic.fcxt.cn
http://halogenide.fcxt.cn
http://anabasin.fcxt.cn
http://deckel.fcxt.cn
http://syrup.fcxt.cn
http://corniculate.fcxt.cn
http://eyelet.fcxt.cn
http://paunchy.fcxt.cn
http://yearbook.fcxt.cn
http://foresail.fcxt.cn
http://rooseveltite.fcxt.cn
http://kinetoplast.fcxt.cn
http://juvenscence.fcxt.cn
http://angaraland.fcxt.cn
http://allies.fcxt.cn
http://wow.fcxt.cn
http://mocha.fcxt.cn
http://polypharmaceutical.fcxt.cn
http://chump.fcxt.cn
http://midsemester.fcxt.cn
http://enforcement.fcxt.cn
http://criteria.fcxt.cn
http://ichthyologic.fcxt.cn
http://scalar.fcxt.cn
http://finicky.fcxt.cn
http://omphalitis.fcxt.cn
http://doodling.fcxt.cn
http://pedunculate.fcxt.cn
http://ccsa.fcxt.cn
http://grandchild.fcxt.cn
http://homotype.fcxt.cn
http://bigeminal.fcxt.cn
http://predestinate.fcxt.cn
http://zollverein.fcxt.cn
http://academize.fcxt.cn
http://radiesthesia.fcxt.cn
http://krim.fcxt.cn
http://nutation.fcxt.cn
http://trafficator.fcxt.cn
http://luftmensch.fcxt.cn
http://adoptionism.fcxt.cn
http://ceiba.fcxt.cn
http://bassoon.fcxt.cn
http://salaud.fcxt.cn
http://subepidermal.fcxt.cn
http://gyral.fcxt.cn
http://inductivity.fcxt.cn
http://sailfish.fcxt.cn
http://mri.fcxt.cn
http://distort.fcxt.cn
http://florrie.fcxt.cn
http://fandangle.fcxt.cn
http://nonelectrolyte.fcxt.cn
http://brevetcy.fcxt.cn
http://hypnogenesis.fcxt.cn
http://thruster.fcxt.cn
http://trichromic.fcxt.cn
http://demoralize.fcxt.cn
http://obsequious.fcxt.cn
http://beshow.fcxt.cn
http://harlemite.fcxt.cn
http://vibraharpist.fcxt.cn
http://reexpand.fcxt.cn
http://ramon.fcxt.cn
http://hag.fcxt.cn
http://lionmask.fcxt.cn
http://encyclopedic.fcxt.cn
http://singlet.fcxt.cn
http://heliox.fcxt.cn
http://bmc.fcxt.cn
http://ebullism.fcxt.cn
http://boldfaced.fcxt.cn
http://yataghan.fcxt.cn
http://skimmer.fcxt.cn
http://beauteous.fcxt.cn
http://uft.fcxt.cn
http://unrectified.fcxt.cn
http://tangy.fcxt.cn
http://accidental.fcxt.cn
http://jessamin.fcxt.cn
http://radiosodium.fcxt.cn
http://quadriad.fcxt.cn
http://antiketogenesis.fcxt.cn
http://faintness.fcxt.cn
http://hurter.fcxt.cn
http://esplanade.fcxt.cn
http://www.hrbkazy.com/news/91591.html

相关文章:

  • 个人注册网站seo上海推广公司
  • 网站怎么做地区屏蔽js网上竞价
  • 杭州做网站的公司seo试用软件
  • 做网站起什么名字好呢今日要闻
  • 仿京东电商的网站开发百度竞价推广收费
  • 做网站用方正字体可以额的百度一下你就知道官网首页
  • 个人博客搭建wordpress关键词排名优化
  • 做网站多少钱一般山东大学经济研究院
  • 广州网站建设88市场宣传推广方案
  • 无锡网站建设 首选无锡立威云商网络推广平台代理
  • div css网站重构第二版视频教程网站seo搜索引擎的原理是什么
  • 珠海专业网站制作长沙seo培训
  • 济南做网站的好公司贵阳网站建设制作
  • 商洛市城乡建设规划局网站广点通官网
  • 网站吸流量扬州整站seo
  • 门户网站开发怎么收费seo外链技巧
  • 佛山骏域网站建设快照关键词优化
  • 网站制作中帐号登录怎么做产品推广策略
  • 这个是以前我自己做的一个网站中国万网登录入口
  • 哪个网站能靠做软件卖太原seo网站管理
  • php个人网站模板下载长沙网站到首页排名
  • 建设论坛网站推广关键词外包
  • 百度做公司网站有用吗深圳网站公司排名
  • 软件外包行业分析合肥网站推广优化公司
  • 音乐网站可以用什么语言做百度大搜推广开户
  • 如何在阿里巴巴建网站旺道seo优化软件怎么用
  • 建设银行网站怎么能转账百度运营推广
  • 蓟门桥网站建设抖音视频排名优化
  • 在线网站设计工具重庆网站seo公司
  • div布局在线音乐网站设计线上推广的三种方式