算法通關村第十關 | 歸并排序

1. 歸并排序原理

? ? ? ? 歸并排序(MERARE-SORT)簡單來說就是將大的序列先視為若干個比較小的數組,分成比較小的結構,然后是利用歸并的思想實現的排序方法,該算法采用經典的分治策略(分就是將問題分成一些小的問題分別求解,而治則將分的階段得到的各答案“合”在一起)。

????????歸并排序算法就是應用歸并思想的一個典型例子。在歸并排序中,我們首先將未排序的數組不斷地劃分成兩個子數組,直到子數組的長度為1。然后,我們合并子數組,使得子數組按照排序規則排列,最后得到排序完成的數組。

????????分治法可以看作是"分而治之"的意思,也就是把一個復雜的問題分成兩個或更多的相同或相似的子問題,直到最后子問題可以簡單的直接求解,從而使得原問題的解即子問題的解的合并。

都需要遞歸地解決子問題,并在最后合并子問題的解。

  1. 上圖就是將 一個大的數組二分成一個個小的數組,知道最后每個劃分的數組只有一個元素的時候,開始進行合并,這種操作就是分階段,可以理解為遞歸拆分子序列的過程,遞歸的深度為logn。
  2. 治階段,將兩個已經有序的子序列合并成一個有序序列。

遍歷時處理元素的過程:

?總結歸并排序的思路:

  • 首先將原數組二分的拆分,直到最后問題變成最小的時候,也就是每個子數組只有一個元素,開始進行第二步。
  • 將兩個子數組合并,按照合并兩個有序數組的方式進行,按照圖中每個左右子樹從下往上,然后再將左右子樹合并,每個子樹最后都是一個有序數組。
    public static void mergeSort(int[] array, int start, int end, int temp[]){if (start >= end){return;}mergeSort(array, start, (start + end) / 2,temp);mergeSort(array, (start + end) / 2 + 1, end,temp);merge(array, start, end, temp);}public static void merge(int[] array, int start, int end, int[] temp){int middle = (start + end) /2;int left = start;int right = middle + 1;int index = left;//將兩邊的最小元素移到左邊while (left <= middle && right <= end){if (array[left] < array[right]){temp[index++] = array[left++];}else {temp[index++] = array[right++];}}//左端元素遍歷完,依次把右端元素轉移過來while (left <= middle){temp[index++] = array[left++];}//左端元素遍歷完,依次把右端元素轉移過來while (right <= end){temp[index++] = array[right++];}//將temp中的元素依次轉到array中,for (int i = start; i <= end; i++){array[i] = temp[i];}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42880.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Axure模板】APP幫助中心原型,在線客服意見反饋模塊高保真原型

作品概況 頁面數量&#xff1a;共 10 頁 兼容軟件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 應用領域&#xff1a;原型設計模板 作品申明&#xff1a;頁面內容僅用于功能演示&#xff0c;無實際功能 作品特色 該模板作品為APP幫助與客服的通用模塊&#xff0c;…

golang操作excel的高性能庫——excelize/v2

目錄 介紹文檔與源碼安裝快速開始創建 Excel 文檔讀取 Excel 文檔打開數據流流式寫入 [相關 Excel 開源類庫性能對比](https://xuri.me/excelize/zh-hans/performance.html) 介紹 Excelize是一個純Go編寫的庫&#xff0c;提供了一組功能&#xff0c;允許你向XLAM / XLSM / XLS…

【Kubernetes】Kubernetes的Pod控制器

Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多種類型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 與控制器之間的關系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 為什么要有headless&#xff1f;2…

CF113A Grammar Lessons 題解

一道模擬題。 題目傳送門 題目意思&#xff1a; 給你一個句子&#xff0c;讓你檢查這個句子的語法是否正確。&#xff08;語法請自行在題目中查看&#xff09; 思路&#xff1a; 就是模擬。依次判斷這個句子是否符合每一條語法即可。但是細節很多就因為細節我錯了好多次&…

數據挖掘 | 零代碼采集房源數據,支持自動翻頁、數據排重等

1 前言 城市規劃、商業選址等應用場景中經常會對地區房價、地域價值進行數據分析&#xff0c;其中地區樓盤房價是分析數據中重要的信息參考點&#xff0c;一些互聯網網站上匯聚了大量房源信息&#xff0c;通過收集此類數據&#xff0c;能夠對地區房價的分析提供參考依據。 如何…

216、仿真-基于51單片機溫度煙霧人體感應布防報警Proteus仿真設計(程序+Proteus仿真+原理圖+配套資料等)

畢設幫助、開題指導、技術解答(有償)見文未 目錄 一、硬件設計 二、設計功能 三、Proteus仿真圖 四、原理圖 五、程序源碼 資料包括&#xff1a; 需要完整的資料可以點擊下面的名片加下我&#xff0c;找我要資源壓縮包的百度網盤下載地址及提取碼。 方案選擇 單片機的選…

SpringBoot 讀取配置文件

Spring Boot 中讀取配置文件有以下 5 種方法&#xff1a; 使用 Value 讀取配置文件。使用 ConfigurationProperties 讀取配置文件。使用 Environment 讀取配置文件。 Autowired private Environment environment; 實現EnvironmentAware接口 使用 PropertySource 讀取配置文件…

Python學習筆記_進階篇(一)_淺析tornado web框架

tornado簡介 1、tornado概述 Tornado就是我們在 FriendFeed 的 Web 服務器及其常用工具的開源版本。Tornado 和現在的主流 Web 服務器框架&#xff08;包括大多數 Python 的框架&#xff09;有著明顯的區別&#xff1a;它是非阻塞式服務器&#xff0c;而且速度相當快。得利于…

2023國賽數學建模思路 - 復盤:人力資源安排的最優化模型

文章目錄 0 賽題思路1 描述2 問題概括3 建模過程3.1 邊界說明3.2 符號約定3.3 分析3.4 模型建立3.5 模型求解 4 模型評價與推廣5 實現代碼 建模資料 0 賽題思路 &#xff08;賽題出來以后第一時間在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

衣服材質等整理(時常更新)

參考文章&圖片來源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纖維 01. 化學纖維 02. 聚酯纖維&#xff08;即&#xff0c;滌綸&#xff09; 一種由有機二元酸和二元醇通過化學縮聚制成的合成纖維。具有出色的抗皺性和保形性&#xff0c;所制衣物在穿著過程中不容…

Lua + mysql 實戰代碼

--[[luarocks lua語言的包管理器luasql https://luarocks.org/brew install luarocksluarocks install luasql-mysql 注意此處&#xff0c;如果你是 mariadb&#xff0c;然后要求指定 MYSQL_DIR 參數的時候&#xff0c;千萬不要指到 mariadb 的安裝目錄&#xff0c;而是要指…

linux通過NC工具啟動臨時端口監聽

1.安裝nc工具 yum install nc -y2. 啟動監聽指定端口 #例如監聽8080端口 nc -lk 8080#后臺監聽 nc -lk 8080 &3. 驗證 #通過另外一臺網絡能通的機器&#xff0c;telnet 該機器ip 監聽端口能通&#xff0c;并且能接手數據 telnet 192.xxx.xxx.xx 8080

單機編排docker compose

Docker之旅(8)-單機編排docker compose 當在宿主機啟動較多的容器時候&#xff0c;如果都是手動操作會覺得比較麻煩而且容易出錯&#xff0c; 并且每個容器之間也會有先后啟動的順序依賴等。這個時候推薦使用 docker 單機 編排工具 docker-compose&#xff0c;docker-compose …

爬蟲逆向實戰(十四)--某培訓平臺登錄

一、數據接口分析 主頁地址&#xff1a;某培訓平臺 1、抓包 通過抓包可以發現登錄是表單提交到j_spring_security_check 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個j_password加密參數 請求頭是否加密&#xff1f; 無響應是…

2024浙大MBA/MEM/MPA四個月沖刺備考策略

近期收到很多考生的咨詢&#xff1a;距離聯考就僅剩四個多月的時間&#xff0c;這個管理類聯考的難度如何&#xff1f;主要考些什么內容&#xff1f;現在才開始備考還有希望上岸浙大嗎&#xff1f;是不是要等到明年在開始備考比較合適&#xff1f;那么今天在這里小立老師就跟大…

Docker Dockerfile 使用方法

目錄 Dockerfile 介紹 創建Dockerfile文件 構建 Docker 鏡像 查看已下載的鏡像 運行 mysql 命令 Dockerfile 介紹 當使用Docker構建容器化應用程序時&#xff0c;Dockerfile是一個用于定義容器鏡像的文本文件。它包含了一系列指令&#xff0c;告訴Docker如何從基礎鏡像&a…

? 將本地已有的項目上傳到 git 倉庫

目錄 ? 將本地已有的項目上傳到 git 倉庫&#x1f3ed; 一、克隆 拷貝&#x1f3a8; 二、強行合并兩個倉庫 ? 將本地已有的項目上傳到 git 倉庫 有兩種方法&#xff1a; ? 一、克隆 拷貝 ? 二、強行合并兩個倉庫 &#x1f3ed; 一、克隆 拷貝 ? 直接用把遠程倉庫拉到本…

CentOS系統環境搭建(十二)——CentOS7安裝Elasticsearch

centos系統環境搭建專欄&#x1f517;點擊跳轉 CentOS 7.9安裝Elasticsearch 7.17.6 文章目錄 CentOS 7.9安裝Elasticsearch 7.17.61.下載2.上傳3.解壓4.調整es占用內存5.修改es默認Java為本地Java6.修改elasticsearch配置文件7.創建用戶8.Elasticsearch 后臺啟動與關閉9.es管…

查看 Linux 內核版本的幾種方法

uname -a uname -srm uname -r 分拆&#xff1a;Linux 5.13.0-19-generic x86 64 5-內核版本 13-主修訂版本 0-19 -次要修訂版本 過查看 /proc/version 文件確認 /proc 目錄包含虛擬文件&#xff0c;其中包含有關系統內存&#xff0c;CPU內核&#xff0c;已安裝文件系統等的信…

020-從零搭建微服務-認證中心(九)

寫在最前 如果這個項目讓你有所收獲&#xff0c;記得 Star 關注哦&#xff0c;這對我是非常不錯的鼓勵與支持。 源碼地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源碼地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…