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

四网合一网站建设知名的搜索引擎优化

四网合一网站建设,知名的搜索引擎优化,高级网页设计师,万网免费建企业网站目录 一,归并排序(递归) 1,基本思想 2,思路实现 二,归并排序(非递归) 1,思路实现 2,归并排序的特性总结: 一,归并排序&#xff0…

目录

一,归并排序(递归)

1,基本思想

 2,思路实现

二,归并排序(非递归)

1,思路实现

2,归并排序的特性总结:


一,归并排序(递归)

1,基本思想

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用;

已有序的子序列合并,得到完全有序的序列;

先使每个子序列有序,再使子序列段间有序,将两个有序表合并成一个有序表,称为二路归并;

归并排序核心步骤:

 2,思路实现

这个归并排序乍一看像一颗二叉树,事实也是如此,如上图所示我们需要不断的拆分直至拆成一个元素此时就是有序的然后再合并合并的时候不要选择原地合并(原地合并时间复杂度很高)需要开辟与数组同等大小的空间用来存放数据

主函数整体框架:

//归并排序
void MergerSort(int* arr, int begin, int end)
{if (begin >= end){return;}//开辟同等大小数组int* tmp = (int*)malloc((end - begin + 1)*sizeof(int));//归并Merger(arr, tmp, begin, end);free(tmp);tmp = NULL;
}

然后我们就要开始实现 Merger 函数,是数据归并了;

把数组拆分成一个数据后开始合并,刚开始一 一合并,然后二 二合并,然后四 四合并,直至全数组合并完;

//归并
void Merger(int* arr, int* tmp,int begin,int end)
{int mid = (begin + end) / 2;if (begin == end){return;}//排序【begin,mid】& 【mid+1,end】Merger(arr, tmp, begin,mid);Merger(arr, tmp, mid+1, end);int begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;int i = 0;while (begin1 <= end1 && begin2 <= end2){if (arr[begin1] <= arr[begin2]){tmp[i++] = arr[begin1++];}else{tmp[i++] = arr[begin2++];}}while(begin1 <= end1){tmp[i++] = arr[begin1++];}while (begin2 <= end2){tmp[i++] = arr[begin2++];}//进行拷贝memcpy(arr + begin, tmp, (end - begin+1)*sizeof(int));
}

然后我们运行测试一下:

可以看到是有序的,选择排序就 OK 了;

其实跟二叉树的前序遍历有异曲同工之处,前后知识都是连贯起来的;

二,归并排序(非递归)

1,思路实现

现在我们来拿捏一下非递归版的归并排序,其实也还是换汤不换药;

其实新思路是这个图的下半部分,我们先让数据一 一合并,然后再二 二合并,然后再四 四合并程倍数增长有人问如果越界了怎么办?没关系我们后面会做越界处理的

直接上代码!

//归并排序(非递归)
void MergerSortNon(int* arr, int begin, int end)
{if (begin >= end){return;}//开辟同等大小数组int* tmp = (int*)malloc((end - begin + 1) * sizeof(int));int gap = 1;int j = 0;while (gap < end){for (j = 0; j < end; j += 2 * gap){int begin1 = j, end1 = begin1+gap-1;int begin2 =end1+1, end2 = begin2+gap-1;int i = 0;//处理边界问题if (end1 >= end){break;}if (end2 >end){end2 = end;}while (begin1 <= end1 && begin2 <= end2){if (arr[begin1] <= arr[begin2]){tmp[i++] = arr[begin1++];}else{tmp[i++] = arr[begin2++];}}while (begin1 <= end1){tmp[i++] = arr[begin1++];}while (begin2 <= end2){tmp[i++] = arr[begin2++];}//进行拷贝memcpy(arr + j, tmp, (end2 - j+ 1) * sizeof(int));}gap *= 2;}free(tmp);tmp = NULL;
}

我们来运行测试一下:

可以看到是有序的,选择排序就 OK 了;

2,归并排序的特性总结:

1, 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题

2, 时间复杂度:O(N*logN)

3, 空间复杂度:O(N)

4, 稳定性:稳定

第四阶段就到这里了,带大家继续吃肉!

后面博主会陆续更新;

如有不足之处欢迎来补充交流!

完结。。

http://www.dtcms.com/wzjs/281067.html

相关文章:

  • it培训机构排名北京上海搜索引擎优化1
  • 2008建立的php网站慢seo修改器
  • 国内做网站建设最好的公司是网站推广优化平台
  • 重要新闻摘抄2022seo优化网络公司排名
  • 微商城网站建设策划方案百度推广关键词排名在哪看
  • PHP企业网站开发实践花钱推广的网络平台
  • 台湾做电商网站有哪些室内设计培训班学费一般多少
  • 做网站在后台如何添加链接百度信息流广告代理
  • 手机网站编程语言网站广告调词软件
  • 启铭网站建设店铺推广平台有哪些
  • wordpress 游戏网页seo完整教程视频教程
  • 外贸剪标大衣正品女款山东seo多少钱
  • 深圳龙华区疫情最新消息青岛seo服务哪家好
  • 家居网站建设基本流程营销型网站的特点
  • 用笔记本电脑能建设网站吗网站维护
  • 河北做网站的公司郑州网站建设公司哪家好
  • ionic3 做网站专业外贸网络推广
  • 网站建设费用还是网络专业建站平台哪个好
  • 网页版梦幻西游礼包码网站很卡如何优化
  • 网站建设备案要哪些市场调研的基本流程
  • wordpress首页导航设置搜索引擎优化培训中心
  • 域名备案需要哪些材料长沙好的seo外包公司
  • 北京建设工程主管部门网站重庆seo网页优化
  • 手机网站开发工具6百度客服人工电话95188
  • 织梦网站如何备份教程最新收录查询
  • 网站推广引流软件市场营销策划方案3000字
  • logo设计网站国外网站注册信息查询
  • 免费网站建设免费咨询摘抄一则新闻
  • 成都中小企业网站建设公司国际新闻直播
  • 深圳宝安区住房和建设局网站三只松鼠搜索引擎推广