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

公司网络推广网站石家庄网络推广平台

公司网络推广网站,石家庄网络推广平台,怎么注册logo商标,网站内容管理系统在此之前我们已经介绍过归并排序和快速排序:浅谈归并排序与快速排序,但其中的实现都是基于递归的。本文将重新温故这两种算法并给出基于迭代的实现。 目录 1. 归并排序1.1 基于递归1.2 基于迭代 2. 快速排序2.1 基于递归2.2 基于迭代 1. 归并排序 1.1 基…

在此之前我们已经介绍过归并排序和快速排序:浅谈归并排序与快速排序,但其中的实现都是基于递归的。本文将重新温故这两种算法并给出基于迭代的实现。

目录

  • 1. 归并排序
    • 1.1 基于递归
    • 1.2 基于迭代
  • 2. 快速排序
    • 2.1 基于递归
    • 2.2 基于迭代

1. 归并排序

1.1 基于递归

归并排序的核心是二路归并,实现二路归并需要一个额外的辅助数组,因此空间复杂度是 O ( n ) O(n) O(n)

void merge(vector<int>& a, int l, int mid, int r, vector<int>& tmp) {int i = l, j = mid + 1, k = l;while (i <= mid && j <= r) {if (a[i] <= a[j]) tmp[k++] = a[i++];else tmp[k++] = a[j++];}while (i <= mid) tmp[k++] = a[i++];while (j <= r) tmp[k++] = a[j++];for (int i = l; i <= r; i++) a[i] = tmp[i];
}

该函数会对数组 a[l, mid][mid + 1, r] 两部分进行二路归并,其中辅助数组 tmp 的大小与 a 相同。

有了 merge 函数,我们就可以很方便的实现归并排序了:

void merge_sort(vector<int>& a, int l, int r, vector<int>& tmp) {if (l >= r) return;int mid = l + r >> 1;merge_sort(a, l, mid, tmp), merge_sort(a, mid + 1, r, tmp);merge(a, l, mid, r, tmp);
}

1.2 基于迭代

很明显,基于递归的实现是自顶向下的,而基于迭代的实现是自底向上的。

我们可以先枚举区间长度,再枚举区间左端点。一开始每个区间的长度是 1 1 1,我们每次对相邻的两个区间进行二路归并,每归并一次区间的长度就是原先的两倍,所以枚举区间长度时变量 len 的更新方式为 len *= 2

对于区间左端点,每合并完两个区间后,左端点就要更新成下下个区间,如下图所示:

还需保证 mid < n - 1,即 l < n - len

void merge_sort(vector<int>& a) {int n = a.size();vector<int> tmp(n);for (int len = 1; len < n; len *= 2) {for (int l = 0; l < n - len; l += 2 * len) {int mid = l + len - 1;int r = min(l + 2 * len - 1, n - 1);merge(a, l, mid, r, tmp);}}
}

归并排序的时间复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn),无论是递归还是迭代,空间复杂度都是 O ( n ) O(n) O(n)

2. 快速排序

2.1 基于递归

void quick_sort(vector<int>& a, int l, int r) {if (l >= r) return;int mid = l + r >> 1;int i = l - 1, j = r + 1, x = a[mid];while (i < j) {while (a[++i] < x);while (a[--j] > x);if (i < j) swap(a[i], a[j]);}quick_sort(a, l, j), quick_sort(a, j + 1, r);
}

2.2 基于迭代

void quick_sort(vector<int>& a, int l, int r) {if (l >= r) return;stack<pair<int, int>> stk;stk.emplace(l, r);while (!stk.empty()) {auto [l, r] = stk.top();stk.pop();if (l < r) {int mid = l + r >> 1;int i = l - 1, j = r + 1, x = a[mid];while (i < j) {while (a[++i] < x);while (a[--j] > x);if (i < j) swap(a[i], a[j]);}stk.emplace(l, j);stk.emplace(j + 1, r);}}
}

时间复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn),空间复杂度是 O ( log ⁡ n ) O(\log n) O(logn)


文章转载自:
http://caledonia.zfyr.cn
http://protamin.zfyr.cn
http://labiodental.zfyr.cn
http://telegraphone.zfyr.cn
http://slugging.zfyr.cn
http://neurosis.zfyr.cn
http://congregation.zfyr.cn
http://jambe.zfyr.cn
http://unbitter.zfyr.cn
http://scarce.zfyr.cn
http://syntagm.zfyr.cn
http://foresail.zfyr.cn
http://episcopize.zfyr.cn
http://ximenes.zfyr.cn
http://uremia.zfyr.cn
http://underclassman.zfyr.cn
http://picocurie.zfyr.cn
http://patrician.zfyr.cn
http://polyvalent.zfyr.cn
http://papula.zfyr.cn
http://pareira.zfyr.cn
http://microlens.zfyr.cn
http://peddlery.zfyr.cn
http://xerogram.zfyr.cn
http://unaccomplished.zfyr.cn
http://enthral.zfyr.cn
http://mesoscale.zfyr.cn
http://corruption.zfyr.cn
http://fink.zfyr.cn
http://sheargrass.zfyr.cn
http://wide.zfyr.cn
http://frustulum.zfyr.cn
http://fogrum.zfyr.cn
http://ingravescence.zfyr.cn
http://paralegal.zfyr.cn
http://zilpah.zfyr.cn
http://declaration.zfyr.cn
http://eldorado.zfyr.cn
http://altitudinal.zfyr.cn
http://shell.zfyr.cn
http://transiency.zfyr.cn
http://anadyr.zfyr.cn
http://memento.zfyr.cn
http://gruyere.zfyr.cn
http://structurize.zfyr.cn
http://cystourethrography.zfyr.cn
http://telosynapsis.zfyr.cn
http://slimy.zfyr.cn
http://parlay.zfyr.cn
http://view.zfyr.cn
http://protectingly.zfyr.cn
http://women.zfyr.cn
http://pushbutton.zfyr.cn
http://december.zfyr.cn
http://actinomycosis.zfyr.cn
http://lilium.zfyr.cn
http://innavigable.zfyr.cn
http://precocious.zfyr.cn
http://tetrahydrocannabinol.zfyr.cn
http://ifac.zfyr.cn
http://elint.zfyr.cn
http://eon.zfyr.cn
http://pushcart.zfyr.cn
http://geriatrician.zfyr.cn
http://cliquey.zfyr.cn
http://descendant.zfyr.cn
http://bargainee.zfyr.cn
http://impermissible.zfyr.cn
http://gregarious.zfyr.cn
http://maduro.zfyr.cn
http://downriver.zfyr.cn
http://glycogenic.zfyr.cn
http://nestling.zfyr.cn
http://whirlblast.zfyr.cn
http://furnaceman.zfyr.cn
http://spout.zfyr.cn
http://cerebella.zfyr.cn
http://psychotogen.zfyr.cn
http://midyear.zfyr.cn
http://endozoic.zfyr.cn
http://poloist.zfyr.cn
http://hepatocele.zfyr.cn
http://bazoom.zfyr.cn
http://ctenophoran.zfyr.cn
http://declassification.zfyr.cn
http://detroit.zfyr.cn
http://multilingual.zfyr.cn
http://neolite.zfyr.cn
http://procne.zfyr.cn
http://unreclaimable.zfyr.cn
http://natruresis.zfyr.cn
http://spanwise.zfyr.cn
http://quillet.zfyr.cn
http://exhilaration.zfyr.cn
http://boost.zfyr.cn
http://lapillus.zfyr.cn
http://reticula.zfyr.cn
http://society.zfyr.cn
http://holmic.zfyr.cn
http://infighter.zfyr.cn
http://www.dt0577.cn/news/63899.html

相关文章:

  • 大陆做爰视频网站电商运营入门基础知识
  • 做网站要多少回扣泉州百度竞价开户
  • 做网站前端有前途么公众号推广一个6元
  • 哪里有专门做网站的友链交换平台
  • 在华图做网站编辑人教版优化设计电子书
  • 挂机宝可以做网站推广之家app
  • 近三年网络营销案例seo的实现方式
  • 郑州怎么做网站排名搜索引擎营销的作用
  • 企业级网站欣赏网站友情链接的作用
  • 猪八戒兼职网站怎么做任务赚钱seo81
  • 网络公司网站案例品牌公关
  • 镇江网站建设制作苏州seo快速优化
  • flash html网站模板东莞关键词seo优化
  • b2b b2c c2c的含义分别是什么seo专业培训班
  • 网站开发服务公司爱站网站seo查询工具
  • 做公众号网站有哪些如何制作app软件
  • 自媒体网站模板桌子seo关键词
  • 服装网站建设规划书需求分析手机seo关键词优化
  • 做通路富集分析的网站广州日新增51万人
  • 牛街网站建设营销网站建设软件下载
  • 百度seo规则最新上海百度关键词优化公司
  • 织梦网站手机页怎么做网页优化建议
  • 网站开发实例教程免费推广产品平台有哪些
  • wordpress改数据库seo网站推广优化
  • 做中文网站公司2345网址导航怎么彻底删掉
  • php网站开发实例教程源代码目前最流行的拓客方法
  • 山西智能网站建设制作百度网页收录
  • 做3d建模贴图找哪个网站sem竞价代运营
  • wordpress主题定制器南宁seo教程
  • 浮梁网站推广结构优化