排序(Sortable)

排序(Sortable)

引言

在計算機科學和數據管理領域,排序算法是一項基本且重要的技能。排序算法能夠將一組無序的數據轉換為有序的數據,從而便于后續的數據處理和分析。本文將深入探討排序算法的基本概念、常用排序方法、以及它們在實際應用中的優勢與局限性。

常用排序算法概述

1. 冒泡排序(Bubble Sort)

冒泡排序是一種簡單的排序算法,它通過重復遍歷要排序的數列,比較每對相鄰元素的值,如果它們的順序錯誤就把它們交換過來。遍歷數列的工作是重復進行直到沒有再需要交換的元素,這意味著該數列已經排序完成。

```python
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr

### 2. 選擇排序(Selection Sort)選擇排序是一種簡單直觀的排序算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(或最大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。```markdown
```python
def selection_sort(arr):for i in range(len(arr)):min_idx = ifor j in range(i+1, len(arr)):if arr[min_idx] > arr[j]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr

### 3. 插入排序(Insertion Sort)插入排序是一種簡單直觀的排序算法。它的工作原理是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增加1的有序表。插入排序在實現上,通常采用in-place排序(即只需用到O(1)的額外空間的排序)。```markdown
```python
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i-1while j >=0 and key < arr[j]:arr[j+1] = arr[j]j -= 1arr[j+1] = keyreturn arr

### 4. 快速排序(Quick Sort)快速排序是一種分而治之的排序算法。它將原始數組分為較小的子數組,然后遞歸地對這些子數組進行排序。快速排序的平均時間復雜度為O(n log n),是常用排序算法中效率較高的一種。```markdown
```python
def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)

### 5. 歸并排序(Merge Sort)歸并排序是一種分治排序算法。它將原始數組分為兩個子數組,然后遞歸地對這兩個子數組進行排序,最后將兩個已排序的子數組合并成一個有序數組。```markdown
```python
def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):merged = []left_index, right_index = 0, 0while left_index < len(left) and right_index < len(right):if left[left_index] < right[right_index]:merged.append(left[left_index])left_index += 1else:merged.append(right[right_index])right_index += 1merged.extend(left[left_index:])merged.extend(right[right_index:])return merged

## 排序算法的性能分析在分析排序算法的性能時,我們通常關注兩個指標:時間復雜度和空間復雜度。### 時間復雜度時間復雜度是衡量算法運行時間的一個指標,通常用大O符號表示。以下是一些常用排序算法的時間復雜度:- 冒泡排序:O(n^2)
- 選擇排序:O(n^2)
- 插入排序:O(n^2)
- 快速排序:O(n log n)
- 歸并排序:O(n log n)### 空間復雜度空間復雜度是衡量算法所需存儲空間的一個指標,通常用大O符號表示。以下是一些常用排序算法的空間復雜度:- 冒泡排序:O(1)
- 選擇排序:O(1)
- 插入排序:O(1)
- 快速排序:O(log n)
- 歸并排序:O(n)## 總結排序算法是計算機科學和數據管理領域的基本技能。本文介紹了常用排序算法的基本概念、實現方法以及性能分析。在實際應用中,根據具體需求和場景選擇合適的排序算法至關重要。希望本文能對您有所幫助。

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

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

相關文章

紫光展銳蜂窩物聯網芯片V8850榮獲國密一級安全認證

近日&#xff0c;紫光展銳蜂窩物聯網芯片V8850榮獲國密一級認證&#xff0c;標志著展銳V8850在安全能力方面獲得權威認可&#xff0c;位居行業領先水平。這是紫光展銳繼短距物聯網芯片V5663在2020獲得ARM PSA Level 2認證&#xff0c;蜂窩物聯網芯片V8811在2021年獲得ARM PSA L…

I.MX6ull-I2C

一,I2C總線介紹 I2C(Inter-Integrated Circuit 集成電路)總線是Philips公司在八十年代初推出的一種串行、半雙工的總 線&#xff0c;主要用于近距離、低速的芯片之間的通信&#xff1b;I2C總線有兩根雙向的信號線&#xff0c;一根數據線SDA用于收 發數據&#xff0c;一根時鐘線…

書籍推薦:《書法課》林曦

記得樊登老師說過&#xff0c;如果你想了解一個事物&#xff0c;就去讀5本相關的書&#xff0c;你會比大部分人都更了解它。這是我讀的第4本和“書法”有關的書&#xff0c;作為一個零基礎的成年人&#xff0c;林曦這本《書法課》非常值得一讀。&#xff08;無論你是否寫字&…

【大疆無人機地圖測繪技術學習:高精度、高效率的全流程解決方案】

文章目錄 大疆無人機地圖測繪算法詳解一、數據采集&#xff08;一&#xff09;飛行平臺與傳感器&#xff08;二&#xff09;航線規劃&#xff08;三&#xff09;數據類型 二、數據處理與建模&#xff08;一&#xff09;數據導入與預處理&#xff08;二&#xff09;空三計算&…

【刪除tomcat默認管理控制臺】

停止Tomcat&#xff1a; ./catalina.sh stop 刪除管理控制臺應用&#xff1a; 進入Tomcat的webapps目錄&#xff1a; cd /path/to/tomcat/webapps List item 刪除manager和host-manager文件夾&#xff1a; rm -rf manager host-manager 啟動Tomcat&#xff1a; ./catali…

工具資料+H3C 交換機常見故障分析排查+高危操作

當我們從客戶那里接到一個故障時,我們根據現象讓客戶收集一堆信息,然后集成商、代理商、設備廠家一級一級的反復咨詢與確認,天天經歷這樣的場景。幾乎每個故障我們都要經過多個層級的人處理,信息的交流占據了每個人大部分的時間,反復的收集信息與確認問題現象也會讓客戶不厭其煩…

STM32:USB 虛擬串口以及使用usb->dfu進行iap

本文介紹stm32上usb的常用功能虛擬串口和DFU(Download Firmware Update) 文章目錄 前言一、usb二、虛擬串口1.cubemx配置1.我們選用高速usb&#xff0c;然后選擇內部低速的phy&#xff0c;這樣使用的usb&#xff0c;最高速度為12Mbit每秒。2.USB_DEVICE cdc類配置3.時鐘配置&am…

HCIA項目實踐--靜態路由的綜合實驗

八 靜態路由綜合實驗 &#xff08;1&#xff09;劃分網段 # 192.168.1.0 24#分析&#xff1a;每個路由器存在兩個環回接口&#xff0c;可以把兩個環回接口分配一個環回地址&#xff0c;所以是四個環回&#xff0c;一個骨干&#xff0c;這樣分配&#xff0c;不會出現路由黑洞#19…

C++基礎知識(三)之結構體、共同體、枚舉、引用、函數重載

九、結構體、共同體和枚舉 1、結構體的基本概念 結構體是用戶自定義的類型&#xff0c;可以將多種數據的表示合并到一起&#xff0c;描述一個完整的對象。 使用結構體有兩個步驟&#xff1a;1&#xff09;定義結構體描述&#xff08;類型&#xff09;&#xff1b;2&#xff…

通過內網穿透ssh實現遠程對家里的linux進行終端操作和編程

內網穿透就是將自己的地址當穿透到公網ip&#xff0c;這一就可以在外網訪問了(因為大部分人ip都是動態分配的)&#xff0c;以適用ssh遠程連接&#xff0c;我這里用的是極點云cpolar&#xff0c;反正也是黑框編程&#xff0c;免費就行了。我是ubuntu虛擬機&#xff0c;在虛擬機上…

Redis 數據類型 Zset 有序集合

有序集合相對于字符串、列表、哈希、集合來說會有?些陌?。它保留了集合不能有重復成員的特點&#xff0c;但與集合不同的是&#xff0c;有序集合中的每個元素都有?個唯?的浮點類型的分數&#xff08;score&#xff09;與之關 聯&#xff0c;著使得有序集合中的元素是可以維…

PHP 中的除以零錯誤

除以零錯誤&#xff08;Division by zero&#xff09;是指數字除以零的情況&#xff0c; 這在數學上是未定義的。在 PHP 中&#xff0c;處理這種錯誤的方式取決于 PHP 版本&#xff1a; PHP 7&#xff1a; 使用 / 運算符會產生一個警告 (E_WARNING) 并返回 false。 使用 intd…

基于springboot軌道交通安全評估系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 時代在飛速進步&#xff0c;每個行業都在努力發展現在先進技術&#xff0c;通過這些先進的技術來提高自己的水平和優勢&#xff0c;軌道交通安全評估管理當然不能排除在外。軌道交通安全評估系統是在實際應用和軟件工程的開發原理之上&#xff0c;運用Java語言以及Spring…

前端面試題目---頁面抖動的原因、如何避免、如何解決

前端頁面抖動是一個常見且影響用戶體驗的問題&#xff0c;下面將從抖動發生的場景、解決辦法以及預防措施三個方面進行詳細闡述。 頁面抖動發生的場景 1. 元素尺寸動態變化 圖片加載&#xff1a;當頁面中圖片的寬高沒有預先設定&#xff0c;在圖片加載完成后&#xff0c;其實…

vue知識點3

1.使用componenent的好處 符合高內聚&#xff0c;低耦合。一個組件出問題了&#xff0c;不會影響其他組件。 2.vue版本決定了一些使用框架的版本 vue2使用的路由版本只能到3 3.路由的配置介紹一下 a.安裝路由的插件 npm install vue-router3 b.整理文件路徑 將路徑整理…

如何測試和驗證CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析

CVE-2024-1430 是一個影響 Netgear R7000 路由器的安全漏洞&#xff0c;漏洞來源于該路由器 Web 管理界面的信息泄露問題。攻擊者通過訪問 /currentsetting.htm 文件&#xff0c;可能泄露敏感信息&#xff0c;如 Wi-Fi 密碼等。 在測試和驗證 CVE-2024-1430 時&#xff0c;您需…

數據結構:哈夫曼樹

1.概念 哈夫曼樹&#xff08;Huffman Tree&#xff09;是一種用于數據壓縮的二叉樹&#xff0c;由大衛哈夫曼&#xff08;David A. Huffman&#xff09;于1952年提出。它通過構建最優二叉樹來實現數據的高效壓縮&#xff0c;廣泛應用于文件壓縮、圖像壓縮等領域。 哈夫曼樹的…

UE5.2后 Bake Out Materials失效

這個問題出現在5.3&#xff0c;5.4&#xff0c;5.5沒有測試 烘焙貼圖后會找不到貼圖位置&#xff0c; 這個是5.2的正常狀態 默認是生成在模型當前目錄里&#xff0c;包括新的材質 但是這個bug會讓材質和貼圖都消失&#xff0c;無法定位 暫時沒有辦法解決&#xff0c;等官方 …

ADC 的音頻實驗,無線收發模塊( nRF24L01)

nRF24L01 采用 QFN20 封裝&#xff0c;有 20 個引腳&#xff0c;以下是各引腳的詳細介紹&#xff1a; 1. 電源引腳 ? VDD&#xff1a;電源輸入端&#xff0c;一般接 3V 電源&#xff0c;為芯片提供工作電壓&#xff0c;供電電壓范圍為 1.9V&#xff5e;3.6V。 ? VSS&#xf…

基于HTML5 Canvas 和 JavaScript 實現的煙花動畫效果

以下是一個使用 HTML5 Canvas 和 JavaScript 實現的煙花動畫效果代碼盒子: <!DOCTYPE html> <html> <head><title>煙花效果