快速排序學習筆記

2022-06-07 12:00:16 字數 752 閱讀 7576

一些廢話:今天在刷題的時候遇到了一道要求比較複雜的排序的題,用sort不能實現,需要手打快排。做完後來我的部落格翻了一下竟然沒寫過快排的隨筆,現在把它填上。

大家都知道,在c++中,有乙個非常好用的函式sort(),使用它只需要包括的標頭檔案即可。

但是在某些情況下,僅僅使用sort()函式並不能充分滿足我們的需求,這時候我們就要手寫快排來滿足需求,本次我僅僅實現一下最簡單最基礎的快排。當然,如果您需要增加您自己的需求,可以想一想在**新增條件可以滿足您的需求。

快排的時間複雜度是nlogn,效率非常高。當然,在我刷題的時候也遇到過基礎快排都解決不了的資料。這種時候就需要你對快排的函式增加一些條件,來減少遞迴的次數。當然,本篇隨筆僅限最基礎的快排,更多的內容不會提及。

快排的整體思想分為以下幾步:(這裡我按照從小到大的思維方式進行描述)

1.找到當前中間位置的資料mid,將資料從中間劃分,分成左邊和右邊兩份

2.找到左邊比mid要大的數的位置,再找到右邊比mid要小的位置,交換二者,然後再次重複本步驟直到左右都找遍了

3.遞迴對左邊的資料進行排序

4.遞迴對右邊的資料進行排序

1

void quicksort(int left,int

right)216

}17if(left//

遞迴排序左側

18if(l//

遞迴排序右側

19 }

**裡的所有注釋都是非常重要的內容,包括=是否要使用,都是十分值得思考的問題

快速排序學習筆記

學習資料出處 白話經典演算法系列之六 快速排序 快速搞定 快速排序採用分治策略,其基本思想 1 從數列中選乙個元素x作為基準數 2 分割槽過程,把不小於x的元素放到x的右邊,小於x的元素放到x的左邊 3 再對左右區間重複進行分割槽操作,直到各區間只有乙個數 morewindows總結的 挖坑填數 分...

學習筆記 快速排序

基本步驟 1 確定分界點x a l a r a l r 1 2 劃分區間 小於x的在一邊,大於x的在另一邊 3 遞迴處理左右兩端 const int n 1e5 5 int n,a n void quick sort int a,int l,int r quick sort a,l,j quick ...

學習筆記 快速排序

將乙個一維陣列從小到大排列。快速排序利用了遞迴的思想。需要三個引數,陣列本身,陣列起始索引也就是0,陣列最右索引,也就是陣列長度 1。簡單來說,快速排序的思想是這樣的,先選擇乙個數作為基準數,把比它小的都移動到左邊,把比它大的都移動到右邊,然後針對左邊這個子陣列,再選擇乙個基準數,比它小的移到左邊,...