排序算法是排列列表元素的算法。最常用的順序是數(shù)字順序和詞典順序,以及升序或降序。在本文中,我們將探討不同的排序算法,并考慮從Leetcode對數(shù)組進行排序的問題。
描述
給定一個整數(shù)數(shù)組,按升序?qū)?shù)組進行排序。nums
示例 1:
示例 2:
約束:
溶液
有幾個選項可以解決此問題:
氣泡排序
氣泡排序是最簡單的排序算法,如果相鄰元素的順序錯誤,則通過重復交換它們來工作。此算法不適用于大型數(shù)據(jù)集,因為它具有時間復雜度 O(n²) 和 s速度復雜度:O(1)。
正如我們之前所討論的未優(yōu)化的氣泡排序的實現(xiàn)。即使數(shù)組已排序,代碼也將以 O(n²) 復雜性運行。讓我們看看如何實現(xiàn)優(yōu)化的氣泡排序算法。
快速排序
快速排序是一種基于分而治之算法原理的排序算法。
通過選擇引用元素(從數(shù)組中選擇的元素)將數(shù)組劃分為子數(shù)組。分割數(shù)組時,必須定位錨點元素,以便小于錨點的元素保留在錨點的左側(cè)(較小),大于錨點的元素保持在錨點的右側(cè)(較大)。
少和右大也使用相同的方法進行拆分。此過程一直持續(xù)到每個子數(shù)組包含一個元素。
最后,將元素連接成一個排序數(shù)組。
時間復雜度 O(n⋅log(n)) 和 s速度復雜度: O(log(n))。
合并排序
合并排序是最流行的排序算法之一,也基于分而治之算法的原理。
在這里,一個問題被分為多個子問題。每個子問題都是單獨解決的。最后,將子問題組合在一起,形成最終的解決方案。
時間復雜度 O(n⋅log(n)) 和速度復雜度:O(n)。