排序算法分析——什么時候 用 什么排序

排序算法 & 分析

  • 排序算法歷史
  • 排序算法分析
    • 很快的排序
    • 較快的排序
    • 中等的排序
    • 很慢的排序
  • 分析的結果
    • 0.沒有要求
    • 1.對速度有要求
    • 2.邊排序邊操作
    • 3.條件1&條件2
    • 4.在有序數中操作
    • 5.條件1&條件4

了解各種排序,詳見排序專欄

排序算法歷史

縱觀排序算法的歷史,有哪些排序算法的速度可以到達 O ( n l o g ( n ) ) O(n~log(n)) O(n?log(n))

  • 冒泡排序 B u b b l e Bubble Bubble S o r t Sort Sort):冒泡排序是最簡單的排序算法之一。它通過多次比較和交換相鄰元素的方式,將最大(或最小)的元素逐漸“冒泡”到數組的一端。盡管冒泡排序的時間復雜度為 O ( n 2 ) O(n^2) O(n2),效率較低,但它易于理解和實現。

  • 選擇排序 S e l e c t i o n Selection Selection S o r t Sort Sort):選擇排序是一種簡單直觀的排序算法。它通過每次選擇未排序部分的最小(或最大)元素,并將其放置在已排序部分的末尾,逐漸構建有序序列。選擇排序的時間復雜度也為 O ( n 2 ) O(n^2) O(n2),但相比冒泡排序,它的交換次數較少。

  • 插入排序 I n s e r t i o n Insertion Insertion S o r t Sort Sort):插入排序是一種穩定的排序算法。它通過將未排序部分的元素逐個插入已排序部分的適當位置,來構建有序序列。插入排序的時間復雜度為 O ( n 2 ) O(n^2) O(n2),但對于小規模或基本有序的數組,插入排序的性能較好。

  • 希爾排序 S h e l l Shell Shell S o r t Sort Sort):希爾排序是插入排序的一種改進版本。它通過將數組分割成多個較小的子序列,并對子序列進行插入排序,最后再對整個數組進行一次插入排序。希爾排序的時間復雜度介于 O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2)之間,取決于所選的間隔序列。

  • 歸并排序 M e r g e Merge Merge S o r t Sort Sort):歸并排序是一種分治算法。它將數組遞歸地分成兩個子數組,分別進行排序,然后將兩個有序子數組合并成一個有序數組。歸并排序的時間復雜度為 O ( n l o g ( n ) ) O(n~log(n)) O(n?log(n)),它是一種穩定的排序算法。

  • 快速排序 Q u i c k Quick Quick S o r t Sort Sort):快速排序也是一種分治算法。它通過選擇一個基準元素,將數組分成兩個子數組,其中一個子數組的所有元素都小于基準元素,另一個子數組的所有元素都大于基準元素。然后遞歸地對兩個子數組進行排序。快速排序的時間復雜度為 O ( n l o g ( n ) ) O(n~log(n)) O(n?log(n)),但在最壞情況下可能達到 O ( n 2 ) O(n^2) O(n2)

  • 堆排序 H e a p Heap Heap S o r t Sort Sort):堆排序利用堆這種數據結構進行排序。它通過構建最大堆(或最小堆),將堆頂元素與最后一個元素交換,并對剩余元素重新調整堆,重復這個過程直到整個數組有序。堆排序的時間復雜度為 O ( n l o g ( n ) ) O(n~log(n)) O(n?log(n)),它是一種不穩定的排序算法。

  • 計數排序(這個不能算排序吧~)( C o u n t i n g Counting Counting S o r t Sort Sort):計數排序是一種非比較排序算法。它通過確定每個元素在排序后的序列中的位置,來實現排序。計數排序的時間復雜度為 O ( n + k ) O(n+k) O(n+k),其中k是待排序數組中的最大值。計數排序適用于元素范圍較小的情況。

  • 桶排序 B u c k e t Bucket Bucket S o r t Sort Sort):桶排序也是一種非比較排序算法。它將待排序元素分到不同的桶中,對每個桶中的元素進行排序,然后按照桶的順序將元素合并起來。桶排序的時間復雜度取決于桶的數量和每個桶內使用的排序算法。

  • 基數排序 R a d i x Radix Radix S o r t Sort Sort):基數排序是一種非比較排序算法。它根據元素的位數,將待排序元素按照位數從低到高進行排序。基數排序可以使用穩定的排序算法作為每個位數的排序算法,如計數排序或桶排序。

排序算法分析

很快的排序

我們發現,很快的排序,例如:桶排序基數排序它們的代碼都比較復雜,一般能不用就不用。

較快的排序

而較快的排序,例如:歸并排序堆排序(之所以不放快排 是因為快排實在是太不穩定了!!!),它們的代碼也比較復雜(優先隊列當我沒說),如果使用優先隊列有不方便訪問,因此能不用就不用。
注:有時優先隊列是很方便的。

中等的排序

中等的排序,如:希爾排序快速排序有時速度無法滿足要求,并且代碼也屬于復雜的范疇。

很慢的排序

很慢的排序,如:冒泡排序選擇排序雖然代碼簡短好記,但是速度實在是太慢了!!!!!!

分析的結果

0.沒有要求

如果沒有特殊要求的話,用優先隊列進行堆排是不錯的選擇,另外還可以用 s o r t sort sort函數排序

1.對速度有要求

如果對速度有要求的話,建議用優先隊列進行堆排,也可以用 s o r t sort sort函數排序。

說了跟沒說一樣

2.邊排序邊操作

如果要在排序中操作,建議使用各種較慢的排序算法,這樣方便理解以及更改。

3.條件1&條件2

這樣的話就最好用歸并排序了!!這是一種優秀的排序算法,并且穩定,可以在大部分情況下使用

4.在有序數中操作

這樣建議使用插入排序,因為插入排序本身就是維護一個有序數列,這樣的話方便快捷!

5.條件1&條件4

插入排序優化——超越歸并排序的超級算法!!

詳見我的神奇博客:史上最快的插入排序

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

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

相關文章

硬件產品經理:從入門到精通(新書發布)

目錄 簡介 新書 框架內容 相關課程 簡介 在完成多款硬件產品從設計到推向市場的過程后。 筆者于2020年開始在產品領域平臺輸出硬件相關的內容。 在這個過程中經常會收到很多讀者的留言,希望能推薦一些硬件相關的書籍或資料。 其實,筆者剛開始做硬…

10. 實現業務功能--退出登錄

目錄 1. 實現 Controller 2. 單體測試 3. 實現前端界面 退出的具體實現邏輯如下: 1. 用戶訪問退出接口 2. 服務器注銷 Session( 在 Controller 中可以直接進行處理 ) 3. 返回成功或失敗 4. 如果返回成功瀏覽器跳轉到相應頁面 5. 結束 一般來說&#…

使用VS2015打開.pro文件后,編譯報錯

編譯報錯內容: MSB8036 找不到 Windows SDK 版本10.0.18362.0。請安裝所需的版本的 Windows SDK 或者在項目屬性頁中或通過右鍵單擊解決方案并選擇“重定解決方案目標”來更改 SD 方法: 1.右鍵點擊 Solution上,在彈出的框中點擊“Retarget…

調整數組使奇數全部都位于偶數前面

題目內容: 輸入一個整數數組,實現一個函數, 來調整該數組中數字的順序使得數組中所有的奇數位于數組的前半部分, 所有偶數位于數組的后半部分。 題目思路: 將奇數部分放在前半部分,偶數部分放在后半部分&am…

學習筆記230804---restful風格的接口,delete的傳參方式問題

如果后端提供的刪除接口是restful風格,那么使用地址欄拼接的方式發送請求,數據放在主體中,后端接受不到,當然也還有一種可能,后端在這個接口的接參設置上是req.query接參。 問題描述 今天遇到的問題是,de…

新榜 | CityWalk本地生活商業價值洞察報告

如果說現在有人問,最新的網絡熱詞是什么? “CityWalk”,這可能是大多數人的答案。 近段時間,“CityWalk”刷屏了各種社交媒體,給網友們帶來了一場“城市漫步”之旅。 脫離群體狂歡,這個在社交媒體引發熱議的詞匯背后又…

首發 | FOSS分布式全閃對象存儲系統白皮書

一、 產品概述 1. 當前存儲的挑戰 隨著云計算、物聯網、5G、大數據、人工智能等新技術的飛速發展,數據呈現爆發式增長,預計到2025年中國數據量將增長到48.6ZB,超過80%為非結構化數據。 同時,數字經濟正在成為我國經濟發展的新…

RabbitMQ安裝配置,筆記整理 RabbitMQ3.12.2版本安裝配置

官網下載 RabbitMQ 官方地址:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 下載時需注意Erlang Versions的版本 這里下載的是3.12.2 2.安裝依賴環境 在線安裝依賴環境: yum install build-essential openssl openssl-dev…

銳捷無線產品運維(Web登錄、 命令行登錄)

目錄 登錄AP產品 Console登錄(只可以現場登錄) Web/Telnet/SSH登錄(可以現場、遠程登錄) 配置AP的管理地址 通過Web界面遠程登錄 通過Telnet、SSH等命令行的方式登錄 登錄AC產品 Console登錄(只可以現場登錄&a…

[bug] 記錄version `GLIBCXX_3.4.29‘ not found 解決方法

在使用mediapipe 這個庫的時候,首次使用出現 GLIBCXX_3.4.29’ not found 錯誤, 看起來是安裝mediapipe 的時候自動升級了 matplotlib 這個庫,導致依賴的 libstd.so 版本不滿足了,GLIBCXX_3.4.29 is an object from libstdc.so.…

【c語言】字符函數與字符串函數(上)

大家好呀,今天給大家分享一下字符函數和字符串函數,說起字符函數和字符串函數大家會想到哪些呢??我想到的只有求字符串長度的strlen,拷貝字符串的strcpy,字符串比較相同的strcmp,今天,我要分享給大家的是我們一些其他的…

Photoshop制作漂亮光澤感3D按鈕

原文鏈接(https://img-blog.csdnimg.cn/45472c07f29944458570b59fe1f9a0e0.png)

CentOS gcc介紹及快速升級

1.gcc介紹 GCC(GNU Compiler Collection)是一個開源的編譯器套件,由 GNU(GNUs Not Unix!的遞歸縮寫) 項目開發和維護。它是一個功能強大且廣泛使用的編譯器,支持多種編程語言,包括 C、C、Objective-C、Fortran、Ada 和…

性能測試技術之基礎篇(精華)

目錄 一、什么是性能? 二、什么是性能測試? 三、性能測試結果需要記錄哪些參數? 四、如何做性能測試(性能測試流程)? 1、指標建模 2、診斷調優 五、常見性能測試工具 一、什么是性能? …

【C語言】字符函數和字符串函數

目錄 1.求字符串長度strlen 2.長度不受限制的字符串函數 字符串拷貝strcpy 字符串追加strcat 字符串比較strcmp 3.長度受限制的字符串函數介紹strncpy strncat ?編輯strncmp 4.字符串查找strstr 5.字符串分割strtok 6.錯誤信息報告 strerror perror 7.字符分類函…

【算法挨揍日記】day03——雙指針算法_有效三角形的個數、和為s的兩個數字

611. 有效三角形的個數 611. 有效三角形的個數https://leetcode.cn/problems/valid-triangle-number/ 題目描述: 給定一個包含非負整數的數組 nums ,返回其中可以組成三角形三條邊的三元組個數。 解題思路: 本題是一個關于三角形是否能成立…

淺談Fetch API

什么是Fetch API Fetch API 是一種現代的 JavaScript API,用于進行網絡請求和處理響應數據。它提供了一種更簡單和更靈活的方式來執行網絡請求,取代了傳統的 XMLHttpRequest(XHR)。 Fetch API 具有以下特點: Promise…

概述、搭建Redis服務器、部署LNP+Redis、創建Redis集群、連接集群、集群工作原理

Top NSD DBA DAY09 案例1:搭建redis服務器案例2:常用命令限案例3:部署LNPRedis案例4:創建redis集群 1 案例1:搭建redis服務器 1.1 具體要求如下 在主機redis64運行redis服務修改服務運行參數 ip 地址192.168.88.6…

【問題整理】Ubuntu 執行 apt-get install xxx 報錯

Ubuntu 執行 apt-get install xxx 報錯 一、問題描述: 執行apt-get install fcitx時,報如下錯誤 grub-pc E: Sub-process /usr/bin/dpkg returned an error code (1)二、解決方法: 嘗試修復依賴問題: sudo apt-get -f install這個命令會嘗試修復系統…

Elasticsearch:如何在 Ubuntu 上安裝多個節點的 Elasticsearch 集群 - 8.x

Elasticsearch 是一個強大且可擴展的搜索和分析引擎,可用于索引和搜索大量數據。 Elasticsearch 通常用于集群環境中,以提高性能、提供高可用性并實現數據冗余。 在本文中,我們將討論如何在 Ubuntu 20.04 上安裝和配置具有多節點集群的 Elast…