LuLib開發之一 quicksort

2021-07-15 18:37:10 字數 1534 閱讀 2839

檢視源**

快速排序:quicksort(arr, left, right)

大致思路:

1.選基準(pivot):例如以陣列最後的元素為基準。

pivot = arr[right]
設定起始指標(start)和結束指標(end)。

start = left

end = right

設定空位指標(emp).

emp = right
注:快速排序有個分冶法的思想,但也有個挖空填數的思想,最初選定基準,相當於在基準的位置挖了乙個空

2.分類:將大於基準的元素放在右邊,將小於基準的放在左邊

while start!=end:

while arr[start]<=pivot and start!=end:

#向右查詢大於基準的元素,除非start與end重合

start = start + 1

if start!=end:

#start與end未重合,那start所指向的元素一定大於基準

#將大於基準的元素放在右邊挖好的空位上

#ps:此時該空位一定在右邊

arr[emp] = arr[start]

#重定向空位

emp = start

else:

#兩指標重合,且此時一定是start從左向右靠近end,emp指向end

arr[emp] = pivot

#分類完成

break

while arr[end]>=pivot and start!=end:

#向左查詢小於基準的元素,除非start與end重合

end = end + 1

if start!=end:

#start與end未重合,那end所指向的元素一定小於基準

#將小於基準的元素放在左邊挖好的空位上

#ps:此時改空位一定在右邊

arr[emp] = arr[end]

#重定向空位

emp = end

else:

#start與end重合,且一定是end從右向左靠近start,emp指向start

arr[emp] = pivot

#分類完成

break

3.遞迴排序:

if emp==left:

#基準是最小的元素,只用排序右邊的陣列

quicksort(arr, emp+1, right)

elif emp==right:

#基準是最大的元素,只用排左邊的陣列

quicksort(arr, left, emp-1)

else:

#基準兩邊都有其他元素,兩邊都需要排序

quicksort(arr, left, emp-1)

quicksort(arr, emp+1, right)

4.排序完成

JB開發之一

2 deb打包使用finker,deb安裝包也就是debian library launchdaemons launchdaemons是使用者未登陸前就啟動的服務 守護程序 library mobilesubstrate mobile substrate是乙個公共庫,可以用來動態替換記憶體中的 資料...

iOS開發之一 入門介紹

今天就介紹一下ios開發的基本的東西,有很多東西都是經常用到的而我卻經常記不住,所以還是寫下來吧。ios開發需要的開發工具是xcode,而xcode又必須執行在 os x 蘋果系統 環境下,所以我們需要蘋果系統的電腦。現在有三種途徑 第一種是在windows環境下安裝虛擬機器,這種方法最簡單,但是需...

Flask開發筆記之一

flask開發筆記之一 除了flask,常見的pythonweb框架還有 l django 全能型web框架 l web.py 乙個小巧的web框架 l bottle 和flask類似的web框架 l tornado facebook的開源非同步web框架。web 伺服器使用一種名為 web伺服器閘...