电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解

瀏覽:108日期:2022-06-01 13:49:36
目錄
  • 一. 歸并排序的定義
  • 二. 歸并排序的流程
  • 三. 歸并排序的圖解
  • 四. 歸并排序的代碼
  • 五. 歸并排序的時(shí)間復(fù)雜度
  • 六. 歸并排序的總結(jié)

一. 歸并排序的定義

歸并排序(merge sort)是一種常見的排序算法:

  • 它的基本思想是將待排序數(shù)組分成若干個(gè)子數(shù)組。
  • 然后將相鄰的子數(shù)組歸并成一個(gè)有序數(shù)組。
  • 最后再將這些有序數(shù)組歸并(merge)成一個(gè)整體有序的數(shù)組。

這個(gè)算法最早出現(xiàn)在1945年,由約翰·馮·諾伊曼(John von Neumann)(又一個(gè)天才,現(xiàn)代計(jì)算機(jī)之父,馮·諾依曼結(jié)構(gòu)、普林斯頓結(jié)構(gòu))首次提出。

  • 當(dāng)時(shí)他在為美國(guó)政 府工作,研究原子彈的問(wèn)題。
  • 由于當(dāng)時(shí)計(jì)算機(jī),他在研究中提出了一種高效計(jì)算的方法,這個(gè)方法就是歸并排序。

歸并排序的基本思路是先將待排序數(shù)組遞歸地拆分成兩個(gè)子數(shù)組,然后對(duì)每個(gè)子數(shù)組進(jìn)行排序,最后將兩個(gè)有序子數(shù)組合并成一個(gè)有序數(shù)組。

  • 在實(shí)現(xiàn)中,我們可以使用“分治法”來(lái)完成這個(gè)過(guò)程,即將大問(wèn)題分解成小問(wèn)題來(lái)解決。

歸并排序的算法復(fù)雜度為 O(nlogn),是一種比較高效的排序算法,因此在實(shí)際應(yīng)用中被廣泛使用。

雖然歸并排序看起來(lái)比較復(fù)雜,但是只要理解了基本思路,實(shí)現(xiàn)起來(lái)并不困難,而且它還是一個(gè)非常有趣的算法。

二. 歸并排序的流程

歸并排序是一種基于分治思想的排序算法,其基本思路可以分為三個(gè)步驟:

步驟一:分解(Divide):歸并排序使用遞歸算法來(lái)實(shí)現(xiàn)分解過(guò)程,具體實(shí)現(xiàn)中可以分為以下幾個(gè)步驟:

  • 如果待排序數(shù)組長(zhǎng)度為1,認(rèn)為這個(gè)數(shù)組已經(jīng)有序,直接返回;
  • 將待排序數(shù)組分成兩個(gè)長(zhǎng)度相等的子數(shù)組,分別對(duì)這兩個(gè)子數(shù)組進(jìn)行遞歸排序;
  • 將兩個(gè)排好序的子數(shù)組合并成一個(gè)有序數(shù)組,返回這個(gè)有序數(shù)組。

步驟二:合并(Merge):合并過(guò)程中,需要比較每個(gè)子數(shù)組的元素并將它們有序地合并成一個(gè)新的數(shù)組:

  • 可以使用兩個(gè)指針 i 和 j 分別指向兩個(gè)子數(shù)組的開頭,比較它們的元素大小,并將小的元素插入到新的有序數(shù)組中。
  • 如果其中一個(gè)子數(shù)組已經(jīng)遍歷完,就將另一個(gè)子數(shù)組的剩余部分直接插入到新的有序數(shù)組中。
  • 最后返回這個(gè)有序數(shù)組。

步驟三:歸并排序的遞歸終止條件:

  • 歸并排序使用遞歸算法來(lái)實(shí)現(xiàn)分解過(guò)程,當(dāng)子數(shù)組的長(zhǎng)度為1時(shí),認(rèn)為這個(gè)子數(shù)組已經(jīng)有序,遞歸結(jié)束。

總體來(lái)看,歸并排序的基本思路是分治法,分成子問(wèn)題分別解決,然后將子問(wèn)題的解合并成整體的解。

三. 歸并排序的圖解

四. 歸并排序的代碼

下面是TypeScript實(shí)現(xiàn)的歸并排序代碼,帶有詳細(xì)的注釋:

// 定義函數(shù)mergeSort,參數(shù)是待排序數(shù)組arrfunction mergeSort(arr: number[]): number[] {    // 計(jì)算數(shù)組長(zhǎng)度    const n = arr.length;    // 如果數(shù)組長(zhǎng)度小于等于1,則直接返回該數(shù)組    if (n <= 1) {return arr;    }    // 計(jì)算中間位置    const middle = Math.floor(n / 2);    // 對(duì)左邊的數(shù)組進(jìn)行歸并排序    const left = mergeSort(arr.slice(0, middle));    // 對(duì)右邊的數(shù)組進(jìn)行歸并排序    const right = mergeSort(arr.slice(middle));    // 合并兩個(gè)排好序的數(shù)組    return merge(left, right);}// 定義函數(shù)merge,參數(shù)是兩個(gè)排好序的數(shù)組left和rightfunction merge(left: number[], right: number[]): number[] {    // 定義指針變量,分別指向兩個(gè)數(shù)組的開頭    let i = 0, j = 0;    // 定義一個(gè)空數(shù)組,用來(lái)存放合并后的數(shù)組    const result = [];    // 比較兩個(gè)數(shù)組的第一個(gè)元素,將較小的放入result數(shù)組    while (i < left.length && j < right.length) {if (left[i] < right[j]) {    result.push(left[i++]);} else {    result.push(right[j++]);}    }    // 將沒有比較完的剩余元素放入result數(shù)組    while (i < left.length) {result.push(left[i++]);    }    while (j < right.length) {result.push(right[j++]);    }    // 返回合并后的數(shù)組    return result;}// 測(cè)試數(shù)據(jù)const testArr = [5, 2, 9, 1, 5, 6];// 調(diào)用插入排序函數(shù)const sortedArr = mergeSort(testArr);// 打印結(jié)果console.log(sortedArr);

代碼執(zhí)行的過(guò)程:

  • mergeSort 函數(shù)實(shí)現(xiàn)歸并排序的遞歸調(diào)用,在該函數(shù)內(nèi),如果數(shù)組的長(zhǎng)度小于等于1,直接返回該數(shù)組。
  • 如果數(shù)組的長(zhǎng)度大于1,那么執(zhí)行以下代碼:
    • 先計(jì)算數(shù)組的中點(diǎn),并將數(shù)組分為左右兩半。
    • 遞歸調(diào)用左邊和右邊的數(shù)組,最終得到兩個(gè)有序的數(shù)組。
  • merge 函數(shù)實(shí)現(xiàn)將兩個(gè)有序的數(shù)組合并為一個(gè)有序的數(shù)組。

五. 歸并排序的時(shí)間復(fù)雜度

復(fù)雜度的分析過(guò)程:

  • 假設(shè)數(shù)組長(zhǎng)度為 n,需要進(jìn)行 logn 次歸并操作;
  • 每次歸并操作需要 O(n) 的時(shí)間復(fù)雜度;
  • 因此,歸并排序的時(shí)間復(fù)雜度為 O(nlogn)。

最好情況: O(log n)

  • 最好情況下,待排序數(shù)組已經(jīng)是有序的了,那么每個(gè)子數(shù)組都只需要合并一次,即只需要進(jìn)行一次歸并操作。
  • 因此,此時(shí)的時(shí)間復(fù)雜度是 O(log n)。

最壞情況: O(nlogn)

最壞情況下,待排序數(shù)組是逆序的,那么每個(gè)子數(shù)組都需要進(jìn)行多次合并。

因此,此時(shí)的時(shí)間復(fù)雜度為 O(nlogn)。

平均情況: O(nlogn)

  • 在平均情況下,我們假設(shè)待排序數(shù)組中任意兩個(gè)元素都是等概率出現(xiàn)的。
  • 此時(shí),可以證明歸并排序的時(shí)間復(fù)雜度為 O(nlogn)。

六. 歸并排序的總結(jié)

歸并排序是一種分治策略的排序算法,是利用分治的思想將一個(gè)大問(wèn)題分成小問(wèn)題,并在適當(dāng)?shù)牡胤胶喜⑺鼈円越鉀Q該問(wèn)題的方法。

它是一種穩(wěn)定的排序算法,時(shí)間復(fù)雜度為O(nlogn)。

歸并排序使用了額外的空間,因此更適合處理大數(shù)據(jù)。

  • 歸并排序的基本流程是通過(guò)遞歸將數(shù)組分成兩半,分別進(jìn)行遞歸排序,最終再進(jìn)行合并。
  • 具體來(lái)說(shuō),將數(shù)組的中間元素作為分界點(diǎn),分別對(duì)左右兩邊的數(shù)組進(jìn)行排序,并在排序完成后進(jìn)行合并。

歸并排序的代碼實(shí)現(xiàn)較為簡(jiǎn)單,但要注意關(guān)于遞歸函數(shù)和合并函數(shù)的實(shí)現(xiàn)。

歸并排序是一種不需要過(guò)多研究的算法,適合于所有的排序場(chǎng)景。

以上就是TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解的詳細(xì)內(nèi)容,更多關(guān)于TypeScript算法歸并排序的資料請(qǐng)關(guān)注其它相關(guān)文章!

標(biāo)簽: JavaScript
主站蜘蛛池模板: 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 苏州西装定制-西服定制厂家-职业装定制厂家-尺品服饰西装定做公司 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 医院专用门厂家报价-医用病房门尺寸大全-抗菌木门品牌推荐 | 氧化铁红厂家-淄博宗昂化工 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 三轴曲线机-端子插拔力试验机|华杰仪器| 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂| 陕西鹏展科技有限公司 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 棕刚玉_白刚玉_铝酸钙-锐石新材料| 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 |