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