08-8.5.1 歸并排序

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜歡《數據結構》部分筆記的小伙伴可以訂閱專欄,今后還會不斷更新。🧑?💻
感興趣的小伙伴可以點一下訂閱、收藏、關注!🚀
謝謝大家!🙏

定義

合并:把兩個或多個已經有序的序列合并成一個

設置三個指針 i , j , k i,j,k i,j,k ,對比 i , j i,j i,j所指元素,選擇一個更小的放入 k k k 所指的位置

只剩一個子表未合并時,可以將該表中剩余元素全部加到總表

二路歸并

也就是上面的過程↑:二合一

四路歸并

設置五個指針 p 1 , p 2 , p 3 , p 4 , k p_1,p_2,p_3,p_4,k p1?,p2?,p3?,p4?,k ,對比 p 1 , p 2 , p 3 , p 4 p_1,p_2,p_3,p_4 p1?,p2?,p3?,p4? 所指元素,選擇一個更小的放入 k k k 所指位置

四路歸并 —— 每選出一個小元素需要對比關鍵字3次

代碼實現

int *B = (int *) malloc (n * sizeof(int));  // 輔助數組B// A[low...mid]和A[mid+1,...,high]各自有序,將兩個部分合并
void Merge(int A[], int low, int mid, int high){int i, j, k;for(k = low; k <= high; k++)B[k] = A[k];  // 將A中所有元素復制到B中for(i = low, j = mid + 1, k = i; i <= mid && j <= high; k++){if(B[i] <= B[j])A[k] = B[i++];  // 將較小的值復制到A中elseA[k] = B[j++];}while(i <= mid) A[k++] = B[i++];while(j <= high) A[k++] = B[j++];
}void MergeSort(int A[], int low, int high){if(low < high){int mid = (low + high) / 2;  // 從中間劃分MergeSort(A, low, mid);  // 對左半部分歸并排序MergeSort(A, mid + 1, high);  // 對右半部分歸并排序Merge(A, low, mid, high);  // 歸并}
}

算法效率分析

2路冰柜的歸并樹,形態上就是一棵倒立的二叉樹

結論
n個元素進行2路歸并排序,歸并趟數 = l o g 2 n =log_2n =log2?n
每趟歸并時間復雜度為 O ( n ) O(n) O(n),則算法時間復雜度為 O ( n l o g 2 n ) O(nlog_2n) O(nlog2?n)
空間復雜度 = O ( n ) =O(n) =O(n),來自輔助數組B

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

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

相關文章

Linux容器時間隔離性測試

在宿主機和容器內同時執行date命令獲取時間 date可以看到宿主機和容器內的時間一致 在宿主機修改時間 date -s "2022-01-01 12:00:00"在宿主機和容器內同時執行date命令獲取時間 date 可以看到時間都修改為了2022年 在宿主機執行命令將時間修改回去 sudo date -s &qu…

《云原生安全攻防》-- 容器攻擊案例:Docker容器逃逸

當攻擊者獲得一個容器環境的shell權限時&#xff0c;攻擊者往往會嘗試進行容器逃逸&#xff0c;利用容器環境中的錯誤配置或是漏洞問題&#xff0c;從容器成功逃逸到宿主機&#xff0c;從而獲取到更高的訪問權限。 在本節課程中&#xff0c;我們將詳細介紹一些常見的容器逃逸方…

摸魚大數據——Kafka——kafka tools工具使用

可以在可視化的工具通過點擊來操作kafka完成主題的創建&#xff0c;分區等操作 注意: 安裝完后桌面不會有快捷方式,需要去電腦上搜索,或者去自己選的安裝位置找到發送快捷方式到桌面! 連接配置 創建主題 刪除主題 主題下的數據查看 數據顯示問題說明 修改工具的數據顯示類型 發…

設計模式使用場景實現示例及優缺點(行為型模式——命令模式)

從前&#xff0c;在一個美麗而神秘的王國里&#xff0c;住著一位智慧而仁慈的國王。他不僅以其公正和睿智著稱&#xff0c;還因為他對知識的熱愛和追求。他的王國繁榮昌盛&#xff0c;人們生活幸福安康。但即便如此&#xff0c;國王知道&#xff0c;要維持這種繁榮與和平&#…

編程參考 - Rule of Three and the Rule of Five in C++

C 中的 "三規則 "和 "五規則 "是管理類中資源管理函數&#xff08;特殊成員函數&#xff09;的準則。這些規則有助于確保類正確一致地管理動態內存、文件句柄或網絡連接等資源。 The Rule of Three and the Rule of Five in C are guidelines for managing…

【C++題解】1168. 歌唱比賽評分

問題&#xff1a;1168. 歌唱比賽評分 類型&#xff1a;數組找數 題目描述&#xff1a; 四&#xff08;1&#xff09; 班要舉行一次歌唱比賽&#xff0c;以選拔更好的苗子參加校的歌唱比賽。評分辦法如下&#xff1a;設 N 個評委&#xff0c;打 N 個分數&#xff08; 0≤每個分…

Linux C語言基礎 day10

目錄 學習目標&#xff1a; 學習內容&#xff1a; 1.指針指向數組 1.1 指針與數組的關系 1.2 指針與一維數組關系實現 1.2.1 指針與一維數組的關系 1.2.2 指針指向一維整型數組作為函數參數傳遞 課外作業&#xff1a; 學習目標&#xff1a; 一周掌握 C基礎知識 學習內…

卡碼網語言基礎課 | 10. 平均績點

目錄 1、問題描述2、知識點① 字符串格式化輸出② 保留小數 3、代碼 1、問題描述 題目描述&#xff1a;每門課的成績分為A、B、C、D、F五個等級&#xff0c;為了計算平均績點&#xff0c;規定A、B、C、D、F分別代表4分、3分、2分、1分、0分。 輸入描述&#xff1a;有多組測試…

RandomAccessFile詳細總結

RandomAccessFile 是 Java 中一個非常特殊的類&#xff0c;它既可以用來讀取文件&#xff0c;也可以用來寫入文件。與其他 IO 類&#xff08;如 FileInputStream 和 FileOutputStream&#xff09;不同&#xff0c;RandomAccessFile 允許您跳轉到文件的任何位置&#xff0c;從那…

【全面介紹Pip換源】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

CV11_模型部署pytorch轉ONNX

如果自己的模型中的一些算子&#xff0c;ONNX內部沒有&#xff0c;那么需要自己去實現。 1.1 配置環境 安裝ONNX pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/simple 安裝推理引擎ONNX Runtime pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/si…

基于Java的斗地主游戲案例開發(做牌、洗牌、發牌、看牌

package Game;import java.util.ArrayList; import java.util.Collections;public class PokerGame01 {//牌盒//?3 ?3static ArrayList<String> list new ArrayList<>();//靜態代碼塊//特點&#xff1a;隨著類的加載而在加載的&#xff0c;而且只執行一次。stat…

底軟驅動 | C++內存相關

文章目錄 C內存相關C內存分區C對象的成員函數存放在內存哪里 堆和棧的區別堆和棧的訪問效率“野指針”有了malloc/free為什么還要new/deletealloca內存崩潰C內存泄漏的幾種情況內存對齊柔性數組參考推薦閱讀 C內存相關 本篇介紹了 C 內存相關的知識。 C內存分區 在C中&#…

力扣第八題——字符串轉換整數

題目介紹 請你來實現一個 myAtoi(string s) 函數&#xff0c;使其能將字符串轉換成一個 32 位有符號整數。 函數 myAtoi(string s) 的算法如下&#xff1a; 空格&#xff1a;讀入字符串并丟棄無用的前導空格&#xff08;" "&#xff09;符號&#xff1a;檢查下一個字…

TCP重傳、滑動窗口、流量控制、擁塞控制機制

目錄 1、TCP重傳機制超時重傳快速重傳 2、滑動窗口3、流量控制4、擁塞控制1、慢啟動2、擁塞避免3、擁塞發生 1、TCP重傳機制 TCP 針對數據包丟失的情況&#xff0c;會用重傳機制解決。 超時重傳 就是在發送數據時&#xff0c;設定一個定時器&#xff0c;當超過指定的時間還沒…

Ctrl+C、Ctrl+V、Ctrl+X 和 Ctrl+Z 的起源

注&#xff1a;機翻&#xff0c;未校對。 The Origins of CtrlC, CtrlV, CtrlX, and CtrlZ Explained We use them dozens of times a day: The CtrlZ, CtrlX, CtrlC, and CtrlV shortcuts that trigger Undo, Cut, Copy, and Paste. But where did they come from, and why do…

文件上傳接口

文章目錄 開發前端接口 開發前端接口 首先這個前端的文件上傳組件使用了,前端組件 首先這個接口不是一般的接口,這個接口可以提取出來,之后那里使用了,就直接放到哪里 所以這是一個萬能文件上傳接口 寫完之后選擇 頭像組件 在圖庫中添加組件 寫前端組件之后,寫了前端的組件…

Bootstrap 5 加載效果

Bootstrap 5 加載效果 Bootstrap 5 是一個流行的前端框架,它提供了豐富的組件和工具,用于快速開發響應式和移動優先的網頁。在本文中,我們將探討 Bootstrap 5 中的加載效果,包括如何實現它們以及它們在網頁設計中的作用。 什么是加載效果? 加載效果是在網頁或應用程序中…

k8s集群創建devops項目一直等待狀態,沒有發現host

問題分析&#xff1a; kubesphere在幫我們自動化創建一些智能自動化的額時候難免會發生一些小錯誤&#xff0c;devops-jenkins是一個部署也會生成一個容器組即pod&#xff0c;容器組的容器服務端口是 targetPort&#xff0c;容器組對外暴露的端口是port&#xff0c;拿devops-c…

[深度學習]基于yolov10+streamlit目標檢測演示系統設計

YOLOv10結合Streamlit構建的目標檢測系統&#xff0c;不僅極大地增強了實時目標識別的能力&#xff0c;還通過其直觀的用戶界面實現了對圖片、視頻乃至攝像頭輸入的無縫支持。該系統利用YOLOv10的高效檢測算法&#xff0c;能夠快速準確地識別圖像中的多個對象&#xff0c;并標注…