日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

排序算法-04快速排序(Python实现)

發布時間:2024/4/11 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法-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实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。