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

yw27777最新跳转接口seo黑帽技术

yw27777最新跳转接口,seo黑帽技术,有什么做糕点的视频网站,做公司 网站建设文章目录 1. 归并排序简介1.1 归并排序定义1.2 归并排序特点 2. 归并排序步骤过程拆解2.1 分割数组2.2 递归排序2.3 合并有序数组 3. 归并排序的优化3.1 原地归并排序3.2 混合插入排序案例代码和动态图 4. 归并排序的优点5. 归并排序的缺点总结 【 已更新完 TypeScript 设计模式…

文章目录

    • 1. 归并排序简介
      • 1.1 归并排序定义
      • 1.2 归并排序特点
    • 2. 归并排序步骤过程拆解
      • 2.1 分割数组
      • 2.2 递归排序
      • 2.3 合并有序数组
    • 3. 归并排序的优化
      • 3.1 原地归并排序
      • 3.2 混合插入排序
      • 案例代码和动态图
    • 4. 归并排序的优点
    • 5. 归并排序的缺点
    • 总结

在这里插入图片描述

【 已更新完 TypeScript 设计模式 专栏,感兴趣可以关注一下,一起学习交流🔥🔥🔥 】

1. 归并排序简介

1.1 归并排序定义

归并排序是一种高效的、基于比较的排序算法,它的核心思想是"分而治之"。假设你是一个厨师,需要制作一大锅复杂的汤。你采用这样的策略:首先将食材分成两组,放在两个锅里,你继续将每个锅里的食材再分成两份,直到每个小锅里只有一种食材。你开始两两比较相邻小锅里的食材,将它们按照口味搭配合并到一个新的锅中,不断重复这个过程,直到所有的食材都被合并到一个完美调和的大锅汤里。这就是归并排序的基本思想。

用TypeScript代码表示一个简单的归并排序:

function mergeSort(arr: number[]): number[] {if (arr.length <= 1) return arr;const mid = Math.floor(arr.length / 2);const left = arr.slice(0, mid);const right = arr.slice(mid);return merge(mergeSort(left), mergeSort(right));
}function merge(left: number[], right: number[]): number[] {let result: number[] = [];let leftIndex = 0;let rightIndex = 0;while (leftIndex < left.length && rightIndex < right.length) {if (left[leftIndex] < right[rightIndex]) {result.push(left[leftIndex]);leftIndex++;} else {result.push(right[rightIndex]);rightIndex++;}}return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}

1.2 归并排序特点

  1. 分治思想: 归并排序采用分治策略,将复杂问题分解为简单子问题
  2. 稳定性: 归并排序是稳定的排序算法
  3. 时间复杂度: 无论最好、最坏还是平均情况,时间复杂度都是O(nlogn)
  4. 空间复杂度: 需要额外的O(n)空间

2. 归并排序步骤过程拆解

2.1 分割数组

const mid = Math.floor(arr.length / 2);
const left = arr.slice(0, mid);
const right = arr.slice(mid);

如厨师将一大堆食材分成两份,他们不断地分割,直到每个小碗里只剩下一种食材。

2.2 递归排序

return merge(mergeSort(left), mergeSort(right));

这个步骤就像每个厨师都在独立地整理自己那一小堆食材,只有一种食材时,它自然就是有序的。

2.3 合并有序数组

function merge(left: number[], right: number[]): number[] {let result: number[] = [];let leftIndex = 0;let rightIndex = 0;while (leftIndex < left.length && rightIndex < right.length) {if (left[leftIndex] < right[rightIndex]) {result.push(left[leftIndex]);leftIndex++;} else {result.push(right[rightIndex]);rightIndex++;}}return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}

这个步骤就像两位厨师比较各自盘子里最小的食材,将较小的那个放到新的大盘子中,不断重复这个过程,直到所有的食材都合并到新的大盘子中,形成一道完整的菜肴。

3. 归并排序的优化

3.1 原地归并排序

function inPlaceMergeSort(arr: number[], start: number = 0, end: number = arr.length - 1): void {if (start >= end) return;const mid = Math.floor((start + end) / 2);inPlaceMergeSort(arr, start, mid);inPlaceMergeSort(arr, mid + 1, end);inPlaceMerge(arr, start, mid, end);
}function inPlaceMerge(arr: number[], start: number, mid: number, end: number): void {let left = start;let right = mid + 1;let temp: number[] = [];while (left <= mid && right <= end) {if (arr[left] <= arr[right]) {temp.push(arr[left]);left++;} else {temp.push(arr[right]);right++;}}while (left <= mid) {temp.push(arr[left]);left++;}while (right <= end) {temp.push(arr[right]);right++;}for (let i = 0; i < temp.length; i++) {arr[start + i] = temp[i];}
}

就像厨师在制作汤时,不是每次都拿出新的锅来装食材,而是直接在原来的大锅里进行操作。这样可以节省一些厨具空间,可能会稍微增加一些烹饪时间。

3.2 混合插入排序

function hybridMergeSort(arr: number[], threshold: number = 10): number[] {if (arr.length <= threshold) {return insertionSort(arr);}const mid = Math.floor(arr.length / 2);const left = arr.slice(0, mid);const right = arr.slice(mid);return merge(hybridMergeSort(left, threshold), hybridMergeSort(right, threshold));
}function insertionSort(arr: number[]): number[] {for (let i = 1; i < arr.length; i++) {let current = arr[i];let j = i - 1;while (j >= 0 && arr[j] > current) {arr[j + 1] = arr[j];j--;}arr[j + 1] = current;}return arr;
}

这个优化版本就像厨师在制作汤时,发现食材数量少于某个阈值(比如10种)时,直接用更简单的烹饪方法,这样可以减少复杂的烹饪步骤,提高整体的烹饪效率。

案例代码和动态图

const array = [38, 27, 43, 3, 9, 50, 10];
const sortedArray = mergeSort(array);
console.log(sortedArray); // [3, 9, 10, 27, 38, 43, 50]

在这里插入图片描述

4. 归并排序的优点

  1. 稳定性好: 归并排序是稳定的排序算法
  2. 时间复杂度稳定: 无论最好、最坏还是平均情况,时间复杂度都是O(nlogn)
  3. 适合外部排序: 当数据量很大,无法一次性加载到内存时,归并排序特别有用

5. 归并排序的缺点

  1. 空间复杂度高: 需要额外的O(n)空间
  2. 对于小规模数据,不如插入排序等简单算法效率高

总结

归并排序就像是一个团队合作的游戏。面对复杂的问题,先将其分解成小问题,各自解决后再合并结果。这种"分而治之"的思想不仅在排序算法中有用,在我们日常解决问题时也常常能派上用场。

归并排序的稳定性和时间复杂度的优势,使它在处理大规模数据时表现出色。特别是在外部排序中,当数据量大到无法一次性加载到内存时,归并排序的思想就显得尤为重要。

没有一种算法是完美的,归并排序的空间复杂度相对较高,在某些内存受限的场景中可能成为一个问题,对于小规模数据,它不如一些更简单的算法高效。因此了解每种算法的特点和适用场景,在实际应用中做出最佳选择。

喜欢的话就点个赞 ❤️,关注一下吧,有问题也欢迎讨论指教。感谢大家!!!

下期预告: TypeScript 算法手册 - 快速排序


文章转载自:
http://verona.c7623.cn
http://curettement.c7623.cn
http://fayalite.c7623.cn
http://swinery.c7623.cn
http://overcame.c7623.cn
http://croak.c7623.cn
http://podzolization.c7623.cn
http://panzer.c7623.cn
http://evolution.c7623.cn
http://keyless.c7623.cn
http://haploidic.c7623.cn
http://obtusely.c7623.cn
http://phigs.c7623.cn
http://federalese.c7623.cn
http://penultimatum.c7623.cn
http://geobiological.c7623.cn
http://mugger.c7623.cn
http://noisome.c7623.cn
http://barytron.c7623.cn
http://philanthrope.c7623.cn
http://affectionately.c7623.cn
http://antihistamine.c7623.cn
http://doctrine.c7623.cn
http://melo.c7623.cn
http://corroborator.c7623.cn
http://statuesque.c7623.cn
http://forceless.c7623.cn
http://faceplate.c7623.cn
http://froth.c7623.cn
http://rubstone.c7623.cn
http://fortaleza.c7623.cn
http://turpitude.c7623.cn
http://byrnie.c7623.cn
http://trailblazer.c7623.cn
http://menat.c7623.cn
http://symphony.c7623.cn
http://confessingly.c7623.cn
http://icily.c7623.cn
http://stayer.c7623.cn
http://unrivaled.c7623.cn
http://grandchild.c7623.cn
http://campion.c7623.cn
http://stipel.c7623.cn
http://constitutor.c7623.cn
http://evincible.c7623.cn
http://assiduity.c7623.cn
http://tunesmith.c7623.cn
http://neckverse.c7623.cn
http://groats.c7623.cn
http://costumer.c7623.cn
http://irreversible.c7623.cn
http://irrelevancy.c7623.cn
http://rompingly.c7623.cn
http://ulexite.c7623.cn
http://shaggymane.c7623.cn
http://depiction.c7623.cn
http://aurinasal.c7623.cn
http://agroindustrial.c7623.cn
http://hornfels.c7623.cn
http://blagoveshchensk.c7623.cn
http://kulun.c7623.cn
http://rifampicin.c7623.cn
http://coenenchyma.c7623.cn
http://prosobranch.c7623.cn
http://vinification.c7623.cn
http://purchase.c7623.cn
http://biquadratic.c7623.cn
http://sometime.c7623.cn
http://stereotype.c7623.cn
http://dree.c7623.cn
http://flange.c7623.cn
http://mercenary.c7623.cn
http://epicenter.c7623.cn
http://acceptability.c7623.cn
http://dihybrid.c7623.cn
http://ascospore.c7623.cn
http://abeyance.c7623.cn
http://belecture.c7623.cn
http://recording.c7623.cn
http://semishrub.c7623.cn
http://lithotomy.c7623.cn
http://solvent.c7623.cn
http://like.c7623.cn
http://ventromedial.c7623.cn
http://pedigree.c7623.cn
http://copycutter.c7623.cn
http://overstudy.c7623.cn
http://mammie.c7623.cn
http://acidemia.c7623.cn
http://recapitulative.c7623.cn
http://semisomnus.c7623.cn
http://playwriter.c7623.cn
http://toluidine.c7623.cn
http://reliquidate.c7623.cn
http://eld.c7623.cn
http://chowry.c7623.cn
http://gnu.c7623.cn
http://bosky.c7623.cn
http://motorcycle.c7623.cn
http://monocoque.c7623.cn
http://www.zhongyajixie.com/news/71245.html

相关文章:

  • java web开发要学什么外贸网站推广seo
  • 温州建设网站制作百度app推广
  • 做动画视频的网站网站流量统计工具
  • ps做购物小网站微博推广费用一般多少
  • 广州企业网站建设多少钱网站优化联系
  • 平台卖货关键词优化排名软件案例
  • 公司的网站费怎样做会计分录网站建站公司
  • 做网站要不要用控件极速一区二区三区精品
  • 企业网站建设 租用服务器淘宝指数查询官网手机版
  • 有专门为个人网站做推广的吗电话销售如何快速吸引客户
  • 地图网站设计怎么建立企业网站
  • 站长工具视频域名交易域名出售
  • 湖北智能网站建设制作百度收录怎么查询
  • wp做网站需要多久优秀软文范例100字
  • 做网站和彩票的同步开奖怎么做湖南seo服务
  • b2c是什么模式郑州官网网站推广优化公司
  • 陕西建设厅网站网络推广网站公司
  • 沭阳网站建设多少钱清远今日头条新闻
  • 大学文明校园网站建设方案seo收费
  • 连锁酒店设计网站建设招聘seo专员
  • 书籍封面设计网站图片扫一扫在线识别照片
  • 株洲在线官网湖南靠谱seo优化
  • 网站建设实训致谢语淘宝网店代运营正规公司
  • vr 做的网站网页搜索关键词
  • 南京seo推广公司seo公司推广宣传
  • 做旅游的网站有哪些网页设计与制作个人网站模板
  • 做网站的图哪来百度推广登录官网
  • 域名注册网站便宜seo点击排名软件哪家好
  • 做网站ui主要研究内容网站开发框架
  • wordpress免费主题网站关键词排名代做