python數組排序排序演算法
一文學會Python十大排序演算法
本文已在個人Github開源項目:PythonGuide中收錄,其中包含Python各個方向的自學編程路線、面試題集合/面經及系列技術文章等,並且不斷收集了上百本著名的計算機書籍pdf版本,會不斷的更新與完善開源項目... 本文作者:海森堡
關鍵術語說明
1. 冒泡排序(Bubble Sort)
冒泡排序時針對相鄰元素之間的比較,可以將大的數慢慢「沉底」(數組尾部)
2. 選擇排序(Selection Sort)
選擇排序(Selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
3. 插入排序(Insertion Sort)
插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反復把已排序元素逐步向後挪位,為最新元素提供插入空間。
4. 希爾排序(Shell Sort)
希爾排序是希爾(Donald Shell)於1959年提出的一種排序演算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱為縮小增量排序,同時該演算法是沖破O(n^2)的第一批演算法之一。它與插入排序的不同之處在於,它會優先比較距離較遠的元素。希爾排序又叫縮小增量排序。
5. 歸並排序(Merge Sort)
歸並排序是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。歸並排序是一種穩定的排序方法。將已有序的子序列合並,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合並成一個有序表,稱為2-路歸並。
6. 快速排序(Quick Sort)
快速排序的基本思想:通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。
一
二:
7. 堆排序(Heap Sort)
堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
8. 計數排序(Counting Sort)
計數排序的核心在於將輸入的數據值轉化為鍵存儲在額外開辟的數組空間中。作為一種線性時間復雜度的排序,計數排序要求輸入的數據必須是有確定范圍的整數。
9. 桶排序(Bucket Sort)
桶排序是計數排序的升級版,原理是:輸入數據服從均勻分布的,將數據分到有限數量的桶里,每個桶再分別排序(有可能再使用別的演算法或是以遞歸方式繼續使用桶排序,此文編碼採用遞歸方式)
演算法描述:
人為設置一個桶的BucketSize,作為每個桶放置多少個不同數值(意思就是BucketSize = 5,可以放5個不同數字比如[1, 2, 3,4,5]也可以放100000個3,只是表示該桶能存幾個不同的數值) 遍歷待排序數據,並且把數據一個一個放到對應的桶里去 對每個不是桶進行排序,可以使用其他排序方法,也遞歸排序 不是空的桶里數據拼接起來
10. 基數排序(Radix Sort)
基數排序也是非比較的排序演算法,對每一位進行排序,從最低位開始排序,復雜度為O(kn),為數組長度,k為數組中的數的最大的位數;
基數排序是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優先順序排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。基數排序基於分別排序,分別收集,所以是穩定的。
參考文章:blog.csdn.net/MobiusStr...
㈡ python幾種經典排序方法的實現
比較排序:通過對數組中的元素進行比較來實現排序。非比較排序:不通過比較來決定元素間的相對次序。演算法復雜度冒泡排序比較簡單,幾乎所有語言演算法都會涉及的冒泡演算法。
冒泡排序冒泡排序,BubbleSort,是一種簡單的排序演算法。它重復地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
歸並排序(Mergesort)是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(DivideandConquer)的一個非常典型的應用。快速排序演算法快速排序是由東尼·霍爾所發展的一種排序演算法。