快速排序演算法思想:
快速排序是找出乙個元素(理論上可以隨便找乙個)作為基準(pivot),然後對陣列進行分割槽操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值都不小於基準值,如此作為基準的元素調整到排序後的正確位置。遞迴快速排序,將其他n-1個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正確位置,排序完成。所以快速排序演算法的核心演算法是分割槽操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞迴。
基準的挑選會影響到演算法的效能,一般情況將序列的第乙個元素作為基準。
設兩個指標left和right,乙個從左往右掃瞄,乙個從右往左掃瞄;對於左指標,如果左指標所指的元素的值小於或者等於基準值,那麼指標往右移一位,如果大於基準值,則和基準值交換;同理,對於右指標,如果右指標所指的元素的值大於或者等於基準值,那麼指標往左移一位,如果小於基準值,則和基準值交換。
舉個例子:
(19,15,12,18,21,36,45,10) 以19為基準記錄進行快速排序
這裡只列舉一趟的結果
19 , 15 ,12 ,18 ,21, 36 , 45 ,10 // 從後往前掃瞄 10比19小,交換
10 , 15, 12,,18,21,36,45,19, 從前往後掃瞄,21 比19大,交換
10 , 15 , 12 ,18 , 19 ,36, 45, 21 // 19前邊都比19小,後邊都比19大,一趟比較結束
關於自己發展的一點想法
不知不覺,已經30了,在學校工作的一段時間,一度想放棄技術,不幸發現自己除了技術,啥都幹不了,器件又受到很多技術人物的鼓舞,從近50的狂熱工程師到75的學問狂人,讓我覺得這才是我發展的方向,無奈物價飆公升,中間數度思想動搖,但還是想咬咬牙堅持之。個人對於數位電路系統級比較熟悉,近十年全都是一句話概括...
關於演算法的一點思考。。。
關於演算法的一點思考。在實踐過程中,我發現 有時候要解決乙個問題,可以設計幾個演算法分步完成任務,這樣處理起來比較簡單,但是情況並非總是如此,有時,我們需要將幾個步驟放在同乙個演算法內連帶處理,這樣才比較容易處理問題。我還發現,有時候,解決問題的演算法,是被發現出來的,並加以一步一步的檢驗才得以確定...
關於演算法的一點總結
分解問題的角度 fix 某一維度,嘗試另一維度上的所有可能 a.可能是array的 i,j pointers,b.可能是矩形的長與寬,c.可能是tree的每乙個subtree,d.可能是情景題的每一對pair 求所有解的,暴力上backtracking吧 如果問最短 最少的,先想bfs dp這對好 ...