數據結構與算法-----快速排序
快速排序的原理是,每一次排序都找一個基準數,然後比基準數大的元素,放到基準數的右側,比基準數小的元素放到基準的左側,那麽最核心的就是找到基準數的位置, 把基準數放到它應在的位置。現在我們對6 1 2 7 9 3 4 5 10 8 進行排序。
首先找一個基準數,就是一個參照數, 用來進行比較。 為了簡單起見,那就選第一個數6作為基準數好了,我們要做的事就是找到6 所在的位置,讓6右邊的數比它大,讓6左邊的數比它小 如下形式。
3 1 2 5 4 6 7 9 10 8
我們怎麽才能找到6 應該在的位置呢? 方法很簡單,那就是從序列3 1 2 5 4 6 7 9 10 8 的兩端進行探測。先從序列的右側進行查找, 只要找到一個比基準數6大的數就停下來,然後再從序列的左邊進行查找,只要找到一個比基準數6小的數就停止,這時交換它們兩個的位置。 這時我們可以用兩個變量i 和 j 分別指向序列的最左側和最右側。剛開始的時候,變量i 指向序列的最左邊,就是數字6, j指向序列的最右邊,指向數字8, 如下圖所示
首先j 從右向左移動,只要找到比6小的數就停止下來,j到了5的位置。這時i 再從左向右出發, 只要找到比6大的數就停止下來,所以它到了7的位置
這時交換這兩個數的位置
第一次交換結束,序列變成了 6, 1, 2, 5, 9 , 3 5, 7, 10, 8. 數字5 和數字7進行了交換。現在j 接著向左走,到了4的位置就停下來,因為4也比6小。這時i 接著從左向右走,到了9的位置,9比6 大。
然後再交換它們的位置
又一次的交換結束了,我們的序列變成了 6 1 2 5 4 3 9 7 10 8 。 現在接著繼續探測, j 接著向左走,到了3的位置就停止了,它比6小。 接著i向右走,突然發現i和j 相遇了,都到了3的位置上,表明探測結束了。
基準數6的位置應該在3的位置上,我們來交換3和6位置
到這時我們終於找到的6的位置,比6大的數在它的右側,比6小的數在它的左側
數據結構與算法-----快速排序