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

歡迎訪問 生活随笔!

生活随笔

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

python

Python排序算法之快速排序

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

轉(zhuǎn)自:https://www.cnblogs.com/AlwinXu/p/5424905.html

快速排序(quickSort)

快排的思想:首先任意選取一個(gè)數(shù)據(jù)(通常選用數(shù)組的第一個(gè)數(shù))作為關(guān)鍵數(shù)據(jù),然后將所有比它小的數(shù)都放到它前面,所有比它大的數(shù)都放到它后面,這個(gè)過程稱為一趟快速排序。

百度百科給的算法:

一趟快速排序的算法是: 1)設(shè)置兩個(gè)變量i、j,排序開始的時(shí)候:i=0,j=N-1; 2)以第一個(gè)數(shù)組元素作為關(guān)鍵數(shù)據(jù),賦值給key,即key=A[0]; 3)從j開始向前搜索,即由后開始向前搜索(j--),找到第一個(gè)小于key的值A(chǔ)[j],將A[j]和A[i]互換; 4)從i開始向后搜索,即由前開始向后搜索(i++),找到第一個(gè)大于key的A[i],將A[i]和A[j]互換; 5)重復(fù)第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中A[j]不小于key,4中A[i]不大于key的時(shí)候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進(jìn)行交換的時(shí)候i, j指針位置不變。另外,i==j這一過程一定正好是i+或j-完成的時(shí)候,此時(shí)令循環(huán)結(jié)束)。

?

時(shí)間復(fù)雜度:O(nlgn)

?

#QuickSort by Alvindef QuickSort(myList,start,end):#判斷l(xiāng)ow是否小于high,如果為false,直接返回 if start < end: i,j = start,end #設(shè)置基準(zhǔn)數(shù) base = myList[i] while i < j: #如果列表后邊的數(shù),比基準(zhǔn)數(shù)大或相等,則前移一位直到有比基準(zhǔn)數(shù)小的數(shù)出現(xiàn) while (i < j) and (myList[j] >= base): j = j - 1 #如找到,則把第j個(gè)元素賦值給第個(gè)元素i,此時(shí)表中i,j個(gè)元素相等 myList[i] = myList[j] #同樣的方式比較前半?yún)^(qū) while (i < j) and (myList[i] <= base): i = i + 1 myList[j] = myList[i] #做完第一輪比較之后,列表被分成了兩個(gè)半?yún)^(qū),并且i=j,需要將這個(gè)數(shù)設(shè)置回base myList[i] = base #遞歸前后半?yún)^(qū) QuickSort(myList, start, i - 1) QuickSort(myList, j + 1, end) return myList myList = [49,38,65,97,76,13,27,49] print("Quick Sort: ") QuickSort(myList,0,len(myList)-1) print(myList)

轉(zhuǎn)載于:https://www.cnblogs.com/fengff/p/9213738.html

總結(jié)

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

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