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

歡迎訪問 生活随笔!

生活随笔

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

python

python算法与数据结构-快速排序算法

發布時間:2024/9/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python算法与数据结构-快速排序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

設定一個中間值,如下所示:

low從開始位置找low是找比54小的,26比54小合格 ?high是從末尾位置找比54大的,如下所示:

low和high重合后第一輪循環結束

第一輪遞歸后的結果如下所示:

還需要處理值相等的情況,如下所示:

比如有一個值是54(也可能是多個),正好跟中間值也就是基準值相等,解決思路就是54在一邊出現(或者說在一邊處理),不是左邊出現就是右邊出現,把等于這個情況放到一邊去處理,不是在low這邊就是在high這邊。

上面的high繼續左移的時候,high和low就重合了。

上面的起始位置是動態的,不是固定的0,low-1這樣的

代碼如下所示:

# coding=utf-8 def quick_sort(alist,first,last):"""快速排序"""if first >= last: #這兩個相等表示有一個元素,則終止循環即可。return#n = len(alist)#mid_value = alist[0]# low = 0# high = n - 1mid_value = alist[first]low = firsthigh = last#high對應的值大于中間值的時候,high需要往左走,即high-=1,走到什么時候呢?即low和high沒有相遇的時候,high的值需要一直走,所以外面又加了一層循環 while low<high:#流程是交替進行的,先是high走,high走完了然后是low走,然后又是high走,即左移右移左移依次交替進行,所以外面還需要套一層交替進行的代碼while low<high:#這個是high往左移動過程的代碼#中間值解決思路就是中間值54在一邊出現(或者說在一邊處理),不是左邊出現就是右邊出現。 #把等于這個情況放到一邊去處理,不是在low這邊就是在high這邊,所以下面的alist[high] >= mid_value加了一個等號while low < high and alist[high] >= mid_value:high -= 1#代碼修改了一下,high往左移動,跳出while循環的時候,可以查看一下while循環的條件,可能是high往左走的過程中遇到了比中間值小或者等于中間值的情況,則需要把high的值賦予到low上面,low上面存的是比中間值小的數值alist[low] = alist[high]#low+=1 #因為low里面的值比中間值小,所以low需要加1,這樣寫有可能會錯過low和high重合的情況,注釋掉# 這個是low往右邊移動過程的代碼while low<high and alist[low]<mid_value:low+=1alist[high] = alist[low]#high -= 1,這樣寫有可能會錯過low和high重合的情況,注釋掉#從循環退出時,low == highalist[low] = mid_value#對low左邊的列表執行快速排序#這塊low-1減的時候有可能比first小,所以停止執行的條件我們修改為first>=lastquick_sort(alist,first,low-1)# 對low右邊的列表執行快速排序quick_sort(alist,low+1,last) if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)quick_sort(li, 0, len(li)-1)print(li) """ [54, 26, 93, 17, 77, 31, 44, 55, 20] [17, 20, 26, 31, 44, 54, 55, 77, 93] """

?

總結

以上是生活随笔為你收集整理的python算法与数据结构-快速排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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