基礎排序法有:1、選擇排序,分為「簡單選擇排序」和「堆排序」;2、插入排序,分為「簡單插入排序」和「希爾排序」;3、交換排序,分為「冒泡排序」與「快速排序」;4、歸併排序;5、基數排序。
基礎排序法
排序
沒有一種排序演算法在任何情況下都是最優的,必須根據實際情況選擇最優的演算法來解決問題
演算法穩定性:在一組待排序記錄中,如果存在任意兩個相等的記錄R 和S,且在待排序記錄中R 在S 前,如果在排序後R 依然在S 前,即它們的前後位置在排序前後不發生改變,則稱為排序演算法為穩定的
選擇排序
簡單選擇排序
簡單選擇排序(Simple Selection Sort)是一種直觀的排序演算法,在未排序的序列中,選出最小的元素和序列的首位元素交換,接下來在剩下的未排序序列中再選出最小元素與序列的第二位元素交換,依次類推,最後形成從小到大的已排序序列
時間複雜度:O(N2)
堆排序
將無序的序列產生一個最大堆,將堆頂元素與最後一個元素對換位置,將剩餘元素產生最大堆,依序進行元素交換並產生最大堆
#時間複雜度:O(NlogN) 空間複雜度:O(1)
插入排序
簡單插入排序
將待排序的一組序列分成已排好序和未排序的兩個部分,初始狀態時,已排序序列僅包含第一個元素,未排序序列中的元素為除了第一個以外N-1個元素;此後將未排序序列中的元素逐一插入到已排序的序列中。如此往復,經過N-1次插入後,未排序序列中元素個數為0,則排序完成
#時間複雜度:O(N2) 穩定排序
希爾排序
將待排序的一組元素依一定間隔分成若干個序列,分別進行插入排序。開始時設定的"間隔"較大,在每輪排序中將間隔逐步減小,直到"間隔"為1,也就是最後一步是進行簡單插入排序
#時間複雜度:和增量序列的選取有關非穩定排序
#交換排序
#冒泡排序
#對元素個數為N 的待排序序列進行排序時,共進行N-1次循環。在第k 次循環中,從第1到第N-k個元素從前往後進行比較,每次比較相鄰的兩個元素,若前一個元素大於後一個元素,則兩者互換位置,否則保持位置不變
時間複雜度:O(N2)
快速排序
#將未排序元素依一個為基準的"主元"分成兩個子序列,其中一個子序列的記錄都大於主元,而另一個子序列都小於主元,然後遞歸地對這兩個子序列用類似的方法進行排序
時間複雜度:O(Nlog2N)
歸併排序
#將大小為N 的序列看成N 個長度為1的子序列,接下來將相鄰子序列兩兩進行歸併操作,形成N/2( 1)個長度為2(或1)的有序子序列;然後再繼續進行相鄰子序列兩兩歸併操作,如果一直循環,直到剩下1個長度為N 的序列,則該序列為原始序列完成排序後的結果
時間複雜度:O(Nlog2N) 空間複雜度:O(N)
基數排序
桶排序
#如果已知N 個關鍵字的取值範圍是在0 到M- 1 之間,而M 比N 小的多,則桶排序演算法將關鍵字的每個取值建立一個"桶",即建立M 個桶,在掃描N 個關鍵字時,將每個關鍵字放入對應的桶中,然後按桶的順序收集一遍就自然有序了
基數排序
#基數排序是桶排序的一種推廣,它所考慮的待排記錄包含不只一個關鍵字
以上是基礎排序法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!