書上沒寫 我自己想了想 簡單說下吧
快速排序 使得基準數左邊全是小於基準數 右邊全是大於基準數
主要是基準數 是取左邊第乙個的
先說左邊開始為什麼不可以
就像上面的這個例子:
按左邊開始會發生什麼? 結果應該是7和6交換了
如果迴圈結束 i!=j
那麼基準值就會覆蓋到left的位置 問題來了 如果right位置j>i(就是執行了左邊的查詢後,右邊的找不到了)呢 left所在位置的值就是比基準值大 因為沒和right交換
所以就是說 迴圈結束前 left找到的left必須要和右邊right進行交換 否則就會產生這種結果
那麼我們就直接先找到right的位置(右邊開始) 如果找得到的話,那麼right所在位置的值必然比基準值小,就算迴圈結束,第乙個位置也會放入right所在位置的值,為什麼?因為left
看著下面** 應該很清楚了
關於KMP演算法的個人理解
最近準備接下來的校招面試,一直沒學過資料結構的我,也不得不準備準備這方面的知識。對於字串匹配這個課題,現在有很多的方法,然kmp確實其中經典的一種方法,這兩天找了很多的相關資料,卻發現理解很簡單,而實現卻有點小困難,為了永久解決這個問題,苦心鑽研了下,現把我的理解記錄如下,供有相同疑惑的童鞋一起學習...
關於Prim演算法的個人理解
既然接觸了最短路徑演算法,也就肯定會接觸最小生成樹中的prim演算法。prime演算法主要是來從乙個無向圖 注意,是無向圖 來生成乙個權值和最小的最小生成樹 一定無環 最小生成樹當然權值和唯一但是生成樹的結構不唯一。prim演算法的主體構造和迪傑斯特拉演算法極其相似,並且採用的都是貪心思想,也就是在...
關於快速排序演算法的理解
直接進入正題吧,快排演算法的思想主要是分兩步 1.使用空間複雜度為1的方法將一堆數中的某個元素找到自己的位置,並且保證左邊的數比自己小 大 右邊的數比自己大 小 2.將這個堆數左邊所有的數再次當做那堆數放到上面1的方法中,重複,直到代入的這堆數完全有序,完成之後再將將右邊所有的數當做那堆數放到上面的...