這個快速排序的算法作業(yè)竟然做了我一天姜挺。晰绎。
詳細的代碼和標(biāo)注在GitHub里
第一道題: 每次用數(shù)組的第一個數(shù)作為pivot number.?
提醒: 一定要按照課程中所說的方式寫你的代碼,不然算出來的數(shù)字會不一樣。
這也是寫了我一上午的題在跳,不過后面只要重復(fù)利用這串代碼枪萄,工作量就不大了。
第二道題: 每次用數(shù)組的最后一個數(shù)作為pivot number
將每次迭代數(shù)組中最后一個數(shù)與頭部數(shù)據(jù)交換猫妙,然后用第一題的代碼就行瓷翻。
第三道題: 每次用選取數(shù)組的第一個數(shù),最后一個數(shù)和中間數(shù)割坠,取這三個數(shù)的中值作為pivot number
寫了我一下午齐帚。三個數(shù)取中位數(shù),中間值位置的計算彼哼,以及調(diào)試用了好久对妄。
如果想直接看答案,請去這里沪羔。
總結(jié)
1.遞歸的時候要想清楚base case情況饥伊,該輸出什么。這一點不容易蔫饰,應(yīng)為base case往往是拆分到最后才能看出來的琅豆。通常的情況有兩個,拆分到最后數(shù)組中剩下一個數(shù)據(jù)篓吁,和剩下兩個數(shù)據(jù)茫因。要判斷哪種情況是我們的base case。輸出的什么要根據(jù)任務(wù)要求杖剪,是輸出數(shù)字(任務(wù)要求數(shù)數(shù)) 還是輸出數(shù)組(任務(wù)要求排序)
2. 許多小的函數(shù)冻押,容易寫錯,最好先寫好盛嘿,調(diào)試好小的函數(shù)洛巢,確保萬無一失了,才將其嵌入大的函數(shù)中次兆。不然一個大的函數(shù)中往往裝有若干個小的函數(shù)稿茉,一出bug,來個遞歸芥炭,很難查清楚是哪個函數(shù)出問題漓库。所以要搶先寫好完美的小函數(shù)。我就被錯誤的取中位數(shù)函數(shù)园蝠,中間值的計算困擾了好久渺蒿。
3. 學(xué)會寫函數(shù)的文檔說明,現(xiàn)在大體分為4 個部分?
函數(shù)說明:這個函數(shù)是做什么的
原理說明:這個函數(shù)用了什么方法彪薛,原理
參數(shù)說明:各個參數(shù)都代表什么茂装,數(shù)據(jù)類型是什么
輸出說明: 輸出什么怠蹂,數(shù)據(jù)類型是什么
用法說明: 給出實際的應(yīng)用案例。