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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/4/11 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法-04快速排序(Python实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

快速排序

性質(zhì)

一種基本的交換排序算法,比較常用的排序算法,簡(jiǎn)稱(chēng)快排。

基本的排序思路如下。基本思想為:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,分割點(diǎn)左邊的數(shù)都比它小,分割點(diǎn)右邊的數(shù)都比它大,然后再按照這個(gè)方法對(duì)兩部分?jǐn)?shù)據(jù)進(jìn)行排序,顯然這是一個(gè)遞歸過(guò)程。

算法詳解

  • 待排序列為2,4,5,1,3。
  • 第一步,確定兩個(gè)指針?lè)謩e指向序列第一個(gè)元素為left和序列最后一個(gè)元素為right,并且首先指定第一個(gè)數(shù)為參考元素base。(left指向2,right指向3,base指2)
  • 第二步,從右至左掃描,偏移right指針,尋找比base小的元素,找到后將其值賦值給left指針。(找到比base小的數(shù)值為1,將其賦值給left位置,此時(shí)序列變?yōu)?,4,5,1,3)
  • 第三步,從左至右掃描,偏移left指針,尋找比base大的元素,找到后將其值賦值給right指針。(找到比base大的數(shù)值4,將其賦值給right,此時(shí)序列為1,4,5,4,3)
  • 第四步,不斷重復(fù)二三兩步,直到left和right指針位置重合,此時(shí)所有元素均被掃描了一遍,將base值賦值給重合的位置。此時(shí),已經(jīng)完成了一輪排序,base(2)左邊都是比它小的,右邊都是比它大的。(此時(shí)序列為1,2,5,4,3)
  • 第五步,以base數(shù)為分割點(diǎn),兩側(cè)分別進(jìn)行前四步。遞歸下去,完成排序。

算法分析

復(fù)雜度如下。

排序名稱(chēng)最好情況最壞情況平均情況
快速排序O(nlogn)O(n^2)O(nlogn)

當(dāng)數(shù)據(jù)有序時(shí),以第一個(gè)關(guān)鍵字為分割點(diǎn),一邊為空,效率最差。

數(shù)據(jù)隨機(jī)分布,左右數(shù)量相當(dāng),效率最好。

顯然,數(shù)據(jù)越隨機(jī)分布,快排效果越好,越接近有序,效果越差。

快排相同元素可能交換位置,所以是不穩(wěn)定的排序。

代碼實(shí)現(xiàn)

def QuickSort(data=[1, 2, 3, 4, 5], left=0, right=1):def divide(inputList, left, right):'''根據(jù)left和right進(jìn)行一次掃描,找到新的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。?

總結(jié)

以上是生活随笔為你收集整理的排序算法-04快速排序(Python实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。