參考了網上大神的理解後,自己也嘗試著寫下傳說中的「快速排序」。
大致思路總結為:挖坑填坑+分治法。
舉個例子:我們對陣列a[9]=進行分析。
首先我們拿陣列中的隨機乙個數作為基準數(參照物件,也就是要挖的坑),把基準數變成坑(用「x」來表示),然後我們把它和陣列的第乙個數字置交;,比如我們拿到的基準數為5,那麼新陣列順序變為
然後我們從最右邊開始找,找到第乙個比x小的數,我們找到了0,然後把0賦值給x,(我們不把這兩個數進行交換操作的原因是為了**簡潔並且提高程式效率),這樣0的位置就變成了乙個新坑x,記為
然後我們從0的下乙個位置開始,找到第乙個比x大的數,我們找到7,然後把7賦值給x,然後7的位置變成新坑,記為
然後我們從7的下乙個位置開始,找到第乙個比x小的數,找到1,把1賦值給x,1變x,記為
然後我們發現1的下乙個位置和坑x的位置是一樣的,那麼,我們就把基準數5填到坑x裡。這樣,我們已經把比基準數大的數全部放到了基準數的右邊,比它小的全部放到了左邊;記為
然後我們分別對基準數的左邊和右邊的子陣列再進行挖坑填坑,直到最後的子陣列裡只有乙個元素。
**如下:
void quick_sort(int a,int left,int right)
a[i]=x;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}}
演算法複習筆記(三)分治法
演算法複習筆記 三 分治法 分治法劃分對策 子問題與原問題相比 問題性質一致,問題規模不同 求解一般分為三個階段 1.劃分 直到問題足夠小可以直接求解為止 2.求解 3.合併 將子問題的解合併為乙個更大規模的問題的解,自底向上逐步求出原問題的解。我們給出下面這個理智引入分治技術 不是所有的分治法都比...
Day2 分治法 快速排序
十大經典演算法總結 一 思想 分治,遞迴 序位,前後位置 下標 元素的值 關鍵字,數字的大小 快速排序,效率很高。圖示說明 和具體操作一起看,那裡的一些結論直接畫在圖上了 二 具體操作 一 思路 basic,分割後的陣列左右邊界lr 下標 動的標記i,j 下標 二 思考 建立分割的這個函式,這個需要...
平面最近點對問題,三分治法。
最近點對問題,三分治法,和求中位數思路是一樣的,1,隨機選乙個數x,線性掃瞄,比x小的一堆a,比x大的一堆b,同時可以得到min min minb x,x maxa 2,對於這兩堆,分別重複1的步驟,直到結束。求中位數,需要拋棄掉一半資料,只求其中乙個子集合的n 2 k大即可。演算法概論 上有證明遞...