排序算法-04快速排序(Python实现)
生活随笔
收集整理的這篇文章主要介紹了
排序算法-04快速排序(Python实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
快速排序
性質
一種基本的交換排序算法,比較常用的排序算法,簡稱快排。
基本的排序思路如下。基本思想為:通過一趟排序將要排序的數據分割成獨立的兩部分,分割點左邊的數都比它小,分割點右邊的數都比它大,然后再按照這個方法對兩部分數據進行排序,顯然這是一個遞歸過程。
算法詳解
- 待排序列為2,4,5,1,3。
- 第一步,確定兩個指針分別指向序列第一個元素為left和序列最后一個元素為right,并且首先指定第一個數為參考元素base。(left指向2,right指向3,base指2)
- 第二步,從右至左掃描,偏移right指針,尋找比base小的元素,找到后將其值賦值給left指針。(找到比base小的數值為1,將其賦值給left位置,此時序列變為1,4,5,1,3)
- 第三步,從左至右掃描,偏移left指針,尋找比base大的元素,找到后將其值賦值給right指針。(找到比base大的數值4,將其賦值給right,此時序列為1,4,5,4,3)
- 第四步,不斷重復二三兩步,直到left和right指針位置重合,此時所有元素均被掃描了一遍,將base值賦值給重合的位置。此時,已經完成了一輪排序,base(2)左邊都是比它小的,右邊都是比它大的。(此時序列為1,2,5,4,3)
- 第五步,以base數為分割點,兩側分別進行前四步。遞歸下去,完成排序。
算法分析
復雜度如下。
| 快速排序 | O(nlogn) | O(n^2) | O(nlogn) |
當數據有序時,以第一個關鍵字為分割點,一邊為空,效率最差。
數據隨機分布,左右數量相當,效率最好。
顯然,數據越隨機分布,快排效果越好,越接近有序,效果越差。
快排相同元素可能交換位置,所以是不穩定的排序。
代碼實現
def QuickSort(data=[1, 2, 3, 4, 5], left=0, right=1):def divide(inputList, left, right):'''根據left和right進行一次掃描,找到新的base:param inputList::param left::param right::return:新base位置'''base = inputList[left]while left < right:while left < right and inputList[right] >= base:right -= 1inputList[left] = inputList[right]while left < right and inputList[left] <= base:left += 1inputList[right] = inputList[left]inputList[left] = basereturn leftif left < right:baseIndex = divide(data, left, right)QuickSort(data, left, baseIndex-1)QuickSort(data, baseIndex+1, right)if __name__ == '__main__':testData = [2, 4, 5, 1, 3]print("Raw Data:", testData)QuickSort(testData, 0, len(testData)-1)print("After Sort:", testData)具體可以查看我的github。?
總結
以上是生活随笔為你收集整理的排序算法-04快速排序(Python实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 排序算法-03希尔排序(python实现
- 下一篇: 排序算法-05简单选择排序(python