【算法】十大排序算法(含時間復雜度、核心思想)

         以下是 **十大經典排序算法** 的時間復雜度、空間復雜度及穩定性總結,適用于面試快速回顧:

排序算法對比表

排序算法最佳時間復雜度平均時間復雜度最差時間復雜度空間復雜度穩定性核心思想
冒泡排序O(n)O(n2)O(n2)O(1)穩定相鄰元素交換,大數沉底。
選擇排序O(n2)O(n2)O(n2)O(1)不穩定每次選最小元素放到已排序末尾。
插入排序O(n)O(n2)O(n2)O(1)穩定將未排序元素插入已排序序列。
希爾排序O(n log n)O(n log2 n)O(n log2 n)O(1)不穩定分組(增量)插入排序,逐步縮小間隔。
歸并排序O(n log n)O(n log n)O(n log n)O(n)穩定分治法,合并有序子序列。
快速排序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(1)不穩定構建堆結構,交換堆頂與末尾。
計數排序O(n + k)O(n + k)O(n + k)O(n + k)穩定統計元素出現次數,累加輸出。
桶排序O(n + k)O(n + k)O(n2)O(n + k)穩定分桶后對每個桶單獨排序。
基數排序O(nk)O(nk)O(nk)O(n + k)穩定按位分配收集,從低位到高位。

關鍵說明

  1. 穩定性:穩定排序算法保證相等元素的相對順序不變(如歸并排序),不穩定算法可能改變(如快速排序)。

  2. 適用場景

    • 小規模數據:冒泡、插入、選擇排序(簡單但效率低)。
    • 大規模數據:快速、歸并、堆排序(O(n log n) 復雜度)。
    • 特定數據分布
      • 整數且范圍小:計數排序。
      • 均勻分布數據:桶排序。
      • 多關鍵字排序:基數排序。
  3. 空間復雜度

    • 原地排序:冒泡、插入、選擇、希爾、堆排序(O(1) 空間)。
    • 非原地排序:歸并、計數、桶、基數排序(需額外空間)。
  4. 快速排序優化

    • 三數取中法:避免最壞情況 O(n2)。
    • 小數組切換插入排序:遞歸到小數組時用插入排序提升效率。

面試常見問題

  1. 為什么快速排序在實際應用中比歸并排序更常用?

    • 快速排序是原地排序,緩存友好;歸并排序需要 O(n) 額外空間。
  2. 堆排序為什么不如快速排序快?

    • 堆排序數據訪問方式跳躍(非局部性原理),緩存命中率低。
  3. 如何選擇排序算法?

    • 數據規模、內存限制、穩定性需求、數據分布特征。

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

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

相關文章

LVS的 NAT 模式實現 3 臺RS的輪詢訪問

使用LVS的 NAT 模式實現 3 臺RS的輪詢訪問 1.配置 RS(NAT模式)2. 配置 LVS 主機(僅主機、NAT模式)2.1 配置僅主機網卡(192.168.66.150/24 VIP )2.2 配置 NAT 網卡(192.168.88.6/24 DIP&#xff…

一、MySQL8的my.ini文件

MySQL8.0.11的安裝版本my.ini配置文件默認存放在:C:/Program Files/MySQL/MySQL Server 8.0/ 目錄下;而MySQL8.0.11綠色免安裝版本是沒有my.ini配置文件,用戶可以自行構建后,再通過my.ini進行數據庫的相關配置 一、MySQL8.0.11默…

微調這件小事:訓練集中的輸入數據該作為instruction還是input?從LLaMA-Factory的源碼中尋找答案吧~

在之前的博文中,我們已經了解了LLaMA-Factory框架執行各類任務的流程。今天,我們將深入探討SFT微調過程中關于數據集的兩個關鍵問題: 數據集中的instruction和input是如何結合起來生成大模型可以理解的輸入的?instruction是不是就是system prompt呢?(之所以會問這個問題,…

nacos-actuator漏洞

1、nacos配置文件添加以下配置 vim application.properties# 添加以下配置項 management.endpoints.enabled-by-defaultfalse management.server.port-12、重啟Nacos systemctl restart nacos3、驗證 打開地址http://ip:port/nacos/actuator查看是否有敏感信息輸出&#xff0…

extern關鍵字的用法

目錄 總述 一、聲明外部變量 二、聲明外部函數 三、實現模塊化編程 四、與"C" 連用,實現C和C的混合編程 五、注意事項 六、疑點補充(你可能會有和我一樣的疑問?) 總述 在C和C中,extern關鍵字用于聲明外…

Jboss漏洞再現

一、CVE-2015-7501 1、開環境 2、訪問地址 / invoker/JMXInvokerServlet 出現了讓下載的頁面,說明有漏洞 3、下載ysoserial工具進行漏洞利用 4、在cmd運行 看到可以成功運行,接下來去base64編碼我們反彈shell的命令 5、執行命令 java -jar ysoserial-…

Android平臺毫秒級低延遲HTTP-FLV直播播放器技術探究與實現

一、前言 在移動互聯網蓬勃發展的今天,視頻播放功能已成為眾多Android應用的核心特性之一。面對多樣化的視頻格式和傳輸協議,開發一款高效、穩定的視頻播放器是許多開發者追求的目標。FLV(Flash Video)格式,盡管隨著H…

BUAA XCPC 2025 Spring Training 2

C \color{green}{\texttt{C}} C [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 給定一棵以 1 1 1 為根的樹,記 a i a_{i} ai? 表示節點 i i i 的權值, lca( i , j ) \text{lca(}i,j) lca(i,j) 表示節…

MySQL 中,分庫分表機制和分表分庫策略

在 MySQL 中,分庫分表是一種常見的數據庫水平擴展方案,用于解決單庫單表數據量過大導致的性能瓶頸問題。通過將數據分散到多個數據庫或表中,可以提高系統的并發處理能力、降低單點故障風險,并提升查詢性能。 一、分庫分表的作用 提升性能: 分散數據存儲和查詢壓力,避免單…

組件日志——etcd

目錄 一、簡介 二、安裝【Ubuntu】 安裝etcd 安裝CAPI 三、寫一個示例 3.0寫一個示例代碼 3.1獲取一個etcd服務 3.2獲取租約(寫端操作) 3.3使用租約(寫端操作) 3.4銷毀租約(寫端操作) 3.5獲取etcd服務中的服務列表(讀端操作) 3.6監聽狀態變化(讀端操作) 一、簡介 Et…

python網絡爬蟲開發實戰之網頁數據的解析提取

目錄 1 XPath的使用 1.1 XPath概覽 1.2 XPath常用規則 1.3 準備工作 1.4 實例引入 1.5 所有節點 1.6 節點 1.7 父節點 1.8 屬性匹配 1.9 文本獲取 1.10 屬性獲取 1.11 屬性多值匹配 1.12 多屬性匹配 1.13 按序選擇 1.14 節點軸選擇 2 Beautiful Soup 2.1 簡介…

理解操作系統(一)馮諾依曼結構和什么是操作系統

認識馮諾依曼系統 操作系統概念與定位 深?理解進程概念,了解PCB 學習進程狀態,學會創建進程,掌握僵?進程和孤?進程,及其形成原因和危害 1. 馮諾依曼體系結構 我們常?的計算機,如筆記本。我們不常?的計算機&am…

Tomcat常見漏洞攻略

一、CVE-2017-12615 漏洞原理:當在Tomcat的conf(配置?錄下)/web.xml配置?件中添加readonly設置為false時,將導致該漏洞產 生,(需要允許put請求) , 攻擊者可以利?PUT方法通過精心構造的數據包…

快速求出質數

要快速判斷一個數是否為質數,可以采用以下優化后的試除法,結合數學規律大幅減少計算量: 步驟說明 處理特殊情況: 若 ( n \leq 1 ),不是質數。若 ( n 2 ) 或 ( n 3 ),是質數。若 ( n ) 能被 2 或 3 整除&…

Linux上位機開發實戰(camera視頻讀取)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 關于linux camera,一般都是認為是mipi camera,或者是usb camera。當然不管是哪一種,底層的邏輯都是v4l2&#x…

高性能緩存:使用 Redis 和本地內存緩存實戰示例

在現代高并發系統中,緩存技術是提升性能和降低數據庫壓力的關鍵手段。無論是分布式系統中的Redis緩存,還是本地高效的本地內存緩存,合理使用都能讓你的應用如虎添翼。今天,我們將基于go-dev-frame/sponge/pkg/cache庫的代碼示例&a…

Python實現deepseek接口的調用

簡介:DeepSeek 是一個強大的大語言模型,提供 API 接口供開發者調用。在 Python 中,可以使用 requests 或 httpx 庫向 DeepSeek API 發送請求,實現文本生成、代碼補全,知識問答等功能。本文將介紹如何在 Python 中調用 …

山東大學數據結構課程設計

題目:全國交通咨詢模擬系統 問題描述 處于不同目的的旅客對交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的時間盡可能地短,出門旅游的旅客則期望旅費盡可能省,而老年旅客則要求中轉次數最少。編織一個全國城市間的交…

深入理解倒排索引原理:從 BitSet 到實際應用

倒排索引是一種極為重要的數據結構,它能夠高效地支持大規模數據的快速查詢,本文將深入探討倒排索引的原理,借助 BitSet 這種數據結構來理解其實現機制,并通過具體的JSF請求條件示例來展示其在實際應用中的運算過程。 BitSet&#…

Unity網絡開發快速回顧

知識點來源:總結人間自有韜哥在, 唐老獅,豆包 目錄 1.網絡通信-通信必備知識-IP地址和端口類2.網絡通信中序列化和反序列化2進制數據3.Socket類4.TCP同步服務端和客戶端基礎實現4.1.服務端基本實現4.2.客戶端實現: 5.區分消息類型…