Python排序算法之快速排序
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好听又难忘的网名最新大全74个
- 下一篇: python特殊函数__str__、__