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

上海优化网站排名广州微信小程序开发制作公司

上海优化网站排名,广州微信小程序开发制作公司,自己做民宿在什么网站上投放,可以做软件的网站有哪些功能吗前置知识:讲解019-算法笔试中处理输入和输出,讲解020-递归和master公式 (1)左部分排好序,右部分排好序,利用merge过程让左右整体有序(2)merge过程:谁小拷贝谁,直到左右两部分所有的数字耗尽(3)递归实现和非递归实现(4…

前置知识:讲解019-算法笔试中处理输入和输出,讲解020-递归和master公式

  • (1)左部分排好序,右部分排好序,利用merge过程让左右整体有序
  • (2)merge过程:谁小拷贝谁,直到左右两部分所有的数字耗尽
  • (3)递归实现和非递归实现
  • (4)时间复杂度O(n*logn)
  • (5)需要辅助数组,所以额外空间复杂度O(n)
  • (6)归并排序为什么比O(n^2)的排序快?因为比较行为没有浪费!
  • (7)利用归并排序的便利性可以解决很多问题,例如归并分治

注意:有些资料说可以用原地归并排序,把额外空间复杂度变成O(1),不要浪费时间去学。因为原地归并排序确实可以省空间,但是会把复杂度变成O(n^2)

  • 对这个数组arr=[6,4,2,3,9,4] ,进行归并排序 

  • 挑其中一步来演示: 把[2,4,6]和[3,4,9]合并(merge)

最后再刷回原数组 

void merge(vector<int>& arr,int left, int mid, int right) {int n = right - left + 1;vector<int> help(n,0);int i = 0;int a = left;int b = mid + 1;while (a <= mid && b <= right) {help[i++] = arr[a] <= arr[b] ? arr[a++] : arr[b++];}// 左侧指针,右侧指针,必有一个越界,另一个不越界while (a <= mid) {help[i++] = arr[a++];}while (b <= right) {help[i++] = arr[b++];}for (i = 0; i <n; i++) { // 把 help 里面的数据重新刷回到原数组arrarr[i+left] = help[i];}
}

(1)归并排序递归版

// 递归方法
void mergeSort(vector<int>& arr, int left, int right) {if (left == right) return;int mid = (left + right) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right);
}

(2)归并排序非递归版

// 归并排序非递归版
// 时间复杂度:O(n * logn)
// 空间复杂度:O(n)
void mergeSort2(vector<int>& arr) {int n = arr.size();// 一共发生O(logn)次for (int left, mid, right, step = 1; step < n; step <<= 1) {// 内部分组merge,时间复杂度:O(n)left = 0;while (left < n) {mid = left + step - 1;if (mid + 1 >= n) {// 已经没有右侧了break;}// 有右侧,求右侧的右边界right = min(left + (step << 1) - 1, n - 1);// left ... mid mid+1 ... right//								left ... mid mid+1 ... right//															 left ... mid mid+1 ... rightmerge(arr,left, mid, right);left = right + 1;}}	
}

完整代码:

#include <iostream>
#include <vector>
using namespace std;void merge(vector<int>& arr,int left, int mid, int right) {int n = right - left + 1;vector<int> help(n,0);int i = 0;int a = left;int b = mid + 1;while (a <= mid && b <= right) {help[i++] = arr[a] <= arr[b] ? arr[a++] : arr[b++];}// 左侧指针,右侧指针,必有一个越界,另一个不越界while (a <= mid) {help[i++] = arr[a++];}while (b <= right) {help[i++] = arr[b++];}for (i = 0; i <n; i++) { // 把 help 里面的数据重新刷回到原数组arrarr[i+left] = help[i];}
}/*归并排序递归版假设left...right一共 n 个数T(n) = 2 * T(n/2) + O(n)a = 2,b = 2,c = 1根据master公式,时间复杂度:O(n * logn)空间复杂度:O(n)
*/
// 递归方法
void mergeSort(vector<int>& arr, int left, int right) {if (left == right) return;int mid = (left + right) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right);
}// 归并排序非递归版
// 时间复杂度:O(n * logn)
// 空间复杂度:O(n)
void mergeSort2(vector<int>& arr) {int n = arr.size();// 一共发生O(logn)次for (int left, mid, right, step = 1; step < n; step <<= 1) {// 内部分组merge,时间复杂度:O(n)left = 0;while (left < n) {mid = left + step - 1;if (mid + 1 >= n) {// 已经没有右侧了break;}// 有右侧,求右侧的右边界right = min(left + (step << 1) - 1, n - 1);// left ... mid mid+1 ... right//								left ... mid mid+1 ... right//															 left ... mid mid+1 ... rightmerge(arr,left, mid, right);left = right + 1;}}	
}int main() {vector<int> arr = { 6,4,2,3,9,4};int n = arr.size();mergeSort(arr, 0, n - 1);//mergeSort2(arr);for (int i = 0; i < n; i++) {cout << " " << arr[i] << " " << endl;}system("pause");return 0;
}

完整图:

参考和推荐视频:

算法讲解021【必备】归并排序_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1wu411p7r7/?spm_id_from=333.999.list.card_archive.click&vd_source=a934d7fc6f47698a29dac90a922ba5a3

http://www.yayakq.cn/news/293714/

相关文章:

  • 用织梦做的公司网站 经常被攻击白云区建材网站建设
  • 西安做搭建网站免费网站源码下载器
  • 郑州加盟做网站无锡建设工程招标网
  • 网站城市切换如何做广告优化师面试常见问题
  • 建水网站开发马良行网站3d模型预览怎么做的
  • 深圳做网站设计公司四川监理协会建设网站
  • 响应式电商网站wordpress网络公司主题
  • 宁波网站建设电话成都网站制作成都网站制作
  • 网站建设风格要求安徽省质量提升工程建设网站
  • 做电影网站要懂代码网页制作与设计源代码
  • 灯网一家专门做灯的网站竭诚网络网站建设价格
  • 建应用网站网站后台使用说明
  • 好的网站建设公司长沙门户网站建设公司
  • 网站开发 顺德网站建设美文
  • 建设网站方法有哪些内容中山市建设工程 交易中心网站
  • 建站一条龙wordpress 记账
  • 企业网站建设公司上海长沙网业公司
  • 韶关市手机网站建设怎么样网站建设人员叫什么
  • 武功网站开发域名绑定空间后 一般多久能打开网站
  • 途牛企业网站建设方案海淀最新消息今天
  • 四川 优质高职建设网站在百度做网站推广怎么做
  • 公司如何申请一个网站中小企业服务网
  • 潍坊网站制作班级设计网站建设
  • 长春哪里做网站小程序交易买卖平台
  • 小学网站asp采购网站大全
  • 重庆网站建设挑夹夹虫网页设计如何设置背景
  • 如何升级网站后台怎么查看一个网站做的外链
  • 如何看网站的流量网页设计网站规划报告
  • 西安市网站建设成品网站1688入口网页版怎样
  • 有没有给做淘宝网站的做企业网站一定要企业邮箱嘛