【排序算法對比】快速排序、歸并排序、堆排序

排序算法對比:快速排序、歸并排序、堆排序

1. 快速排序(Quick Sort)

原理

快速排序采用 分治法(Divide and Conquer),通過選取基準值(pivot),將數組劃分為 小于基準值大于基準值 的兩個部分,并遞歸排序。

特點

  • 時間復雜度
    • 最優:O(n log n)
    • 平均:O(n log n)
    • 最差:O(n2)(當選取的 pivot 總是最小或最大值時,會退化成冒泡排序)
  • 空間復雜度O(log n)(遞歸調用棧)
  • 是否穩定:? 不穩定(交換過程中可能改變相同元素的相對位置)
  • 適用場景
    • 適用于大規模數據排序
    • 數據較隨機時性能較優
    • 不適用于數據接近有序需要穩定性的場景

2. 歸并排序(Merge Sort)

原理

歸并排序同樣采用 分治法,將數組拆分成 左右兩部分,分別排序后再 合并(merge),確保整體有序。

特點

  • 時間復雜度
    • 最佳、最差、平均O(n log n)(即使是最壞情況下也能保持 O(n log n)
  • 空間復雜度O(n)(額外存儲歸并時的數組)
  • 是否穩定:? 穩定(歸并過程不會打亂相同元素的相對順序)
  • 適用場景
    • 適用于數據量大且需要穩定性的情況
    • 適用于鏈表排序
    • 適用于外部排序(大數據排序),因其可并行處理數據

3. 堆排序(Heap Sort)

原理

堆排序基于 二叉堆(Binary Heap) 數據結構,先將數組構造成 最大堆(Max Heap),然后依次取出堆頂元素(最大值),調整堆結構,最終得到一個有序數組。

特點

  • 時間復雜度
    • 最優、平均、最差:O(n log n)
  • 空間復雜度O(1)(原地排序,不需要額外空間)
  • 是否穩定:? 不穩定(堆調整過程中可能改變相同元素的相對位置)
  • 適用場景
    • 適用于 大規模數據排序
    • 適用于 對最壞情況有較好保證 的場景
    • 適用于 優先隊列的實現

4. 排序算法對比

排序算法時間復雜度(最優)時間復雜度(平均)時間復雜度(最差)空間復雜度是否穩定適用場景
快速排序O(n log n)O(n log n)O(n2)(退化)O(log n)? 不穩定適用于大規模數據,且數據較隨機時性能較優
歸并排序O(n log n)O(n log n)O(n log n)O(n)? 穩定適用于數據量較大且需要穩定性的情況,如鏈表排序、外部排序
堆排序O(n log n)O(n log n)O(n log n)O(1)? 不穩定適用于 原地排序 且對 最壞情況 有較好保證的場景

5. 選擇哪種排序?

  • 快速排序:一般情況下最快,適用于數據規模大、數據隨機分布的情況。
  • 歸并排序:適用于數據量大、穩定性要求高 的情況,如數據庫排序。
  • 堆排序:適用于 大規模數據排序,適用于 時間復雜度需要穩定的情況

推薦:

  • 如果數據量大,推薦 快速排序(但注意避免最壞情況)。
  • 如果要求穩定排序,推薦 歸并排序
  • 如果空間受限,推薦 堆排序(因為它是 O(1) 空間復雜度的 O(n log n) 排序算法)。

總結:

  1. 快速排序 是平均情況下最快的 O(n log n) 排序,但最壞情況下退化為 O(n2)
  2. 歸并排序 始終O(n log n),但需要額外 O(n) 空間,是穩定排序。
  3. 堆排序 適用于大數據且需要 O(1) 額外空間,但不穩定。

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

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

相關文章

PentestGPT 下載

PentestGPT 下載 PentestGPT 介紹 PentestGPT(Penetration Testing GPT)是一個基于大語言模型(LLM)的智能滲透測試助手。它結合了 ChatGPT(或其他 GPT 模型)與滲透測試工具,幫助安全研究人員自…

防火墻虛擬系統實驗

一實驗拓撲 二實驗過程 配置資源 創建虛擬系統 配置管理員 創建安全策略

代碼隨想錄算法訓練營第31天 | 56. 合并區間 738.單調遞增的數字 968.監控二叉樹

56. 合并區間 代碼隨想錄 56. 合并區間 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…

Go語言對于MySQL的基本操作

一.下載依賴 終端中輸入&#xff1a; go get -u github.com/go-sql-driver/mysql 導入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 獲取驅動 import ("databa…

Linux與深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介紹 在上一節已經完成了客戶端和服務端基本的HTTP通信&#xff0c;但是前面的傳遞并沒有完全體現出HTTP的序列化和反序列化&#xff0c;為了更好得理解其工作流程&#xff0c;在本節會以更加具體的方式分析到HTTP序列化和反序列化 本節會在介紹…

基于Python+SQLite實現(Web)驗室設備管理系統

實驗室設備管理系統 應用背景 為方便實驗室進行設備管理&#xff0c;某大學擬開發實驗室設備管理系統 來管理所有實驗室里的各種設備。系統可實現管理員登錄&#xff0c;查看現有的所有設備&#xff0c; 增加設備等功能。 開發環境 Mac OSPyCharm IDEPython3Flask&#xff…

深拷貝and淺拷貝!

一、什么是拷貝&#xff1f;什么是深拷貝和淺拷貝&#xff1f; &#xff08;1&#xff09;拷貝&#xff1a;拷貝就是為了復用原對象的部分or全部數據&#xff0c;在原對象的基礎上通過復制的方式創建一個新的對象。 拷貝對象可以分為三種類型&#xff1a;直接賦值、淺拷貝和深拷…

高頻面試題(含筆試高頻算法整理)基本總結回顧43

干貨分享&#xff0c;感謝您的閱讀&#xff01; &#xff08;暫存篇---后續會刪除&#xff0c;完整版和持續更新見高頻面試題基本總結回顧&#xff08;含筆試高頻算法整理&#xff09;&#xff09; 備注&#xff1a;引用請標注出處&#xff0c;同時存在的問題請在相關博客留言…

《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP)

《靈珠覺醒:從零到算法金仙的C++修煉》卷三天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP) 哪吒在數據修仙界中繼續他的修煉之旅。這一次,他來到了一片神秘的混元谷,谷中有一座巨大的混元金斗,斗身閃爍著神秘的光芒。谷口有一塊巨大的石碑,上面刻著一行文字:“欲…

網絡爬蟲【簡介】

我叫補三補四&#xff0c;很高興見到大家&#xff0c;歡迎一起學習交流和進步 今天來講一講視圖 一、網絡爬蟲的定義 網絡爬蟲&#xff08;Web Crawler&#xff09;&#xff0c;又稱為網絡蜘蛛、網絡機器人等&#xff0c;是一種按照一定規則自動抓取互聯網信息的程序或腳本。它…

?AI時代到來,對電商來說是效率躍升,還是溫水煮青蛙

?凌晨三點的義烏商貿城&#xff0c;95后創業者小王&#xff0c;靜靜地盯著屏幕上的AI工具&#xff0c;竟露出了笑容。這個月他的跨境玩具店銷量提升了不少&#xff0c;從之前的狀態翻了3倍&#xff1b;而且團隊人數有所變化&#xff0c;從5人縮減到了2人&#xff08;其中包括他…

PDF文件密碼保護破解:安全解密的步驟與技巧

PDF文件加密后&#xff0c;需要特定的密碼才能訪問內容。以下是一些常見的方法來解密PDF文件&#xff1a; 方法一&#xff1a;使用Adobe Acrobat 如果你有Adobe Acrobat Pro&#xff0c;可以使用它來解密PDF文件。 打開Adobe Acrobat Pro&#xff1a; 啟動Adobe Acrobat Pro…

qt 自帶虛擬鍵盤的編譯使用記錄

一、windows 下編譯 使用vs 命令窗口&#xff0c;分別執行&#xff1a; qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先沒有 指定需要使用的輸入法語言就進行過編譯&#xff0c;則需要先 執行 nmake distclean 清理后執行 qmake 才能生效。 …

Java開發之數據庫應用:記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的“dual“表陷阱與突圍之路

記一次醫療系統數據庫遷移引發的異常&#xff1a;從MySQL到PostgreSQL的"dual"表陷阱與突圍之路 一、驚魂時刻&#xff1a;數據庫切換引發的系統雪崩 某醫療影像系統在進行國產化改造過程中&#xff0c;將原MySQL數據庫遷移至PostgreSQL。遷移完成后&#xff0c;系…

C++刷題(二):棧 + 隊列

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及刷題記錄&#xff0c;使用語言為C。 每道題我會給出LeetCode上的題號&#xff08;如果有題號&#xff09;&#xff0c;題目&#xff0c;以及最后通過的代碼。沒有題號的題目大多來自牛客網。對于題目的…

精通游戲測試筆記(持續更新)

第一章、游戲測試的兩條規則 不要恐慌 不要將這次發布當作最后一次發布 不要相信任何人 把每次發布當作最后一次發布 第二章&#xff1a;成為一名游戲測試工程師

Windows功能之FTP服務器搭建

一、創作背景 之前有用linux系統搭建過ftp服務器&#xff0c;最近想著用windows系統也順便搭建一個&#xff0c;看網上有第三方服務軟件一鍵部署&#xff0c;記得windows可以不借助第三方軟件就可以搭建&#xff0c;就想順便操作試試&#xff0c;結果老是連接不上&#xff0c;費…

星型組網模塊的兩種交互方式優缺點解析

星型組網模塊簡介 星型組網模塊工作在433MHz頻段&#xff1b;星型組網模塊集主機&#xff08;協調器&#xff09;、終端為一體&#xff0c;星型組網模塊具有長距離、高速率兩種傳輸模式&#xff0c;一個主機&#xff08;協調器&#xff09;支持多達200個節點與其通訊&#xff0…

二分+前綴和——森林的最大美麗值

森林的最大美麗值(二分差分數組) 題目分析 求最小值的最大值&#xff0c;聯想到二分。 第一階段二段性分析 對于所有樹的高度都可以大于等于mid&#xff0c;那么我們可以確定高度小于mid的值一定也可以&#xff0c;但是此時我需要找的是最大的高度&#xff0c;那么mid一定比…

Pytorch實現之最小二乘梯度歸一化設計

簡介 簡介:LSGAN提出了一種利用最小二乘法來計算兩個數據分布之間的距離,該論文在此基礎上采用梯度歸一化來進一步穩定訓練。 論文題目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一種新的生成對抗網絡的最小…