排序算法的python实现
冒泡排序
冒泡排序是比較簡單的排序方法,它的思路是重復的走過要排序的序列,一次比較兩個元素,如果順序錯誤,就交換元素的位置,直到沒有元素需要交換位置。
| 第一次 | 1 | 6 | 8 | 5 | 9 | 7 |
| 第二次 | 1 | 6 | 8 | 5 | 9 | 7 |
| 第三次 | 1 | 6 | 5 | 8 | 9 | 7 |
| 第四次 | 1 | 6 | 5 | 8 | 9 | 7 |
| 第五次 | 1 | 6 | 5 | 8 | 7 | 9 |
……
代碼實現:
1.lst = [6,1,8,5,9,7] 2.for i in range(len(lst)-1): 3. for j in range(len(lst)-1): 4. if lst[j] > lst[j+1]: 5. tmp = lst[j] 6. lst[j] = lst[j+1] 7. lst[j+1] = tmp 8.print lst選擇排序
選擇排序是從等待排序的數組里選擇一個最小(或者最大)的元素,拿出來放入新的數組,直到取出全部元素。
| 第一次 | 1 | 6 | 8 | 5 | 9 | 7 | 3 |
| 第二次 | 1 | 3 | 8 | 5 | 9 | 7 | 6 |
| 第三次 | 1 | 3 | 5 | 8 | 9 | 7 | 6 |
| 第四次 | 1 | 3 | 5 | 6 | 9 | 7 | 8 |
| 第五次 | 1 | 3 | 5 | 6 | 7 | 9 | 8 |
| 第六次 | 1 | 3 | 5 | 6 | 7 | 8 | 9 |
每一次排序后最小的數組放在已排序的序列的最后
實現代碼
1.lst = [6,1,8,5,9,7,3] 2.for i in range(len(lst)): 3. tmp = lst[i] 4. pos = i 5. for j in range(i+1,len(lst)): 6. if tmp > lst[j]: 7. tmp = lst[j] 8. pos = j 9. a_tmp = lst[i] 10. lst[i] = tmp 11. lst[pos] = a_tmp 12. 13.print lst插入排序
插入排序是一種簡單直觀的排序算法,原理是通過構建有序序列,對于未排序的數據,在已排序的序列中從后想前掃描,找到相應位置后插入。插入排序通常采用in-place排序,即 只需要用到O(1) 的額外空間的排序。
算法描述:
在排序時,如果元素比較的操作代價比較大,可以采用二分查找,來減少操作。
實現代碼:
快速排序 quick sort
又稱 劃分交換排序;排序n個元素,需要Ο(n log n)次比較 ,最壞情況時需要,Ο(n2)次比較,但這種狀況并不常見。
設 有序列 lst = [3,0,1,8,7,2,5,4,9,6] , i= 0 j=9 k = lst[0]
| 3 | 0 | 1 | 8 | 7 | 2 | 5 | 4 | 9 | 6 |
| 2 | 0 | 1 | 8 | 7 | 3 | 5 | 4 | 9 | 6 |
| 2 | 0 | 1 | 3 | 7 | 8 | 5 | 4 | 9 | 6 |
| 2 | 0 | 1 | 3 | 7 | 8 | 5 | 4 | 9 | 6 |
以3為基準,從右向左找比 3 小的值 ,j–
找到第一個小于三的數字2, lst[i] lst[j]交換位置;
從左向右找第一大于3的數字 8 ,交換 lst[i] lst[j]位置 i++
此時大序列可分為兩個小序列
sub_lst_01 = [2,0,1]
sub_lst_01 = [7,8,5,4,9,6]
按照第一趟排序的規則 對兩個子序列進行排序,直到所有子序列長度為1。
| 1 | 0 | 2 |
以2為基準,從右向左找比2小的值,找到數字1 比2小,交換兩者位置
此時從左向右找比2大的數字,未找到,2的位置為排序后的正確位置
| 0 | 1 |
以1為基準,從右向左找比1小的數字,找到0比1小,交換兩者位置
從左向右找比1 大的數字,未找到,1的位置為排序后的正確位置
此時序列只剩0 ,長度為1 ,0 的位置為排序后的正確位置
| 6 | 8 | 5 | 4 | 9 | 7 |
| 6 | 7 | 5 | 4 | 9 | 8 |
| 6 | 4 | 5 | 7 | 9 | 8 |
| . | . | . | . | . | . |
| 5 | 4 | 6 | . | 8 | 9 |
| 5 | 4 | . | . | . | . |
| 4 | 5 | 6 | 7 | 8 | 9 |
產生兩個子序列 [6,4,5] [8,9]
重復以上操作,直到所有的序列排序完成。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的排序算法的python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python:23种Pandas核心操作
- 下一篇: Python 二分查找算法