[問題] 如何記憶quick_sort程式碼

看板C_and_CPP作者 (我沒有暱稱)時間9年前 (2015/01/09 17:03), 9年前編輯推噓6(6016)
留言22則, 12人參與, 最新討論串1/1
我想知道大家如何記住quick sort的運作流程與c程式碼 quick sort的運作流程 1.從待排序的資料中取出第一筆資料當作pivot key 2.由第二筆資料開始向後找到第一筆資料鍵值比基準值大的資料,將此資料的位置記錄為i 3.由最後一筆資料開始向前找到第一筆資料鍵值比基準值小的資料,將此資料的位置記錄 為j 4.若i<j,則將i,j位置的資料交換 5.重複步驟2~4,直到i>j(即i,j位置已交錯)為止 6.將基準鍵值之資料與目前位置為j的資料交換,則基準鍵值之資料已放置在正確位置,且 把其他所有的資料分割成小於基準鍵值和大於基準鍵值的兩組子集合 7.將兩個子集合分別做快排,直到每個子集合均只剩下一個元素時,完成快排 以上是快排的運作流程,我的記憶法是把步驟用1~3個字描述,如下 1.取 2.3.比,記(2) 4.換 5.複 6.分 7.子一 然後是如何記憶程式碼 實際程式碼如下 void quick_sort(int a[],int left,int right){ 變數宣告; if(left<right){ key=a[left]; i=left; j=right; while(i<j){ while(i<right && a[i]<=key)i++; while(j>left && a[j]>=key)j++; if(i<j){a[i]與a[j]交換}/*if*/ }/*while*/ a[left]與a[j]交換; quick_sort(a,left,j-1); quick_sort(a,j+1,right); }/*if*/ }/*quick_sort*/ 然後運作流程要化成程式碼每個步驟又各有幾個細節要注意 變成 1.取 2.3.比,記(前->後;後->前) 4.換 5.複(while框住外面) 6.分 7.子一 這樣要記住一個sort程式碼要注意大約15個細節 又加上其他sort程式碼 整個要記憶的量就很多 不知道大家有什麼撇步可以解決這樣的問題嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.174.199 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1420794226.A.FC0.html

01/09 17:07, , 1F
call qsort() in <cstdlib> ?
01/09 17:07, 1F

01/09 17:48, , 2F
為什麼要記.......
01/09 17:48, 2F

01/09 18:04, , 3F
你的function做的事太多需要refactor
01/09 18:04, 3F

01/09 18:08, , 4F
取一個元素分成比他大比他小的兩堆分別排序再串起來。
01/09 18:08, 4F

01/09 18:09, , 5F
然後請理解分堆的原理,如果需要背這個行業不太適合你
01/09 18:09, 5F

01/09 18:14, , 6F
我有背演算法原理, 沒有背程式碼怎麼寫
01/09 18:14, 6F

01/09 18:26, , 7F
常用到的自然會記得,用不到的也不需要去記。
01/09 18:26, 7F

01/09 18:29, , 8F
幹嘛背這個啦(暈) 你要記的就只有一句話而已
01/09 18:29, 8F

01/09 18:30, , 9F
也就是azureblaze說的分兩堆 → 分別排序 → 串起來
01/09 18:30, 9F

01/09 18:34, , 10F
c/c++ library都有提供,為什麼要記? 你有寫的比較好嗎
01/09 18:34, 10F

01/09 18:59, , 11F
要面試吼XDDDD
01/09 18:59, 11F

01/09 18:59, , 12F
? <---上面那句推文是問句XD
01/09 18:59, 12F

01/10 03:01, , 13F
背程式碼不實際又不實用
01/10 03:01, 13F

01/10 03:03, , 14F
理解演算法和理解使用的語言比較實在
01/10 03:03, 14F
感謝各位,重點大家都提到了 首先函式要重構 這點有也附帶助於記憶 至於為什麼要記憶主因是因為這是公司最厲害的人用的方法 所以我應該請教他才是(怕他不教我XD) 還有一般來說是背原理,程式碼是用推理的 (但是要落實成程式碼,還是要懂一些細節的東西) ※ 編輯: chessjim (61.227.247.65), 01/10/2015 05:35:34

01/10 13:33, , 15F
因為最厲害的人用所以要背 你暗戀他是不是
01/10 13:33, 15F

01/10 14:01, , 16F
我以為最厲害的人都直接std::sort
01/10 14:01, 16F

01/10 14:02, , 17F
除非他們有什麼超厲害的特殊需求
01/10 14:02, 17F

01/10 15:50, , 18F
你們公司最厲害的人有比寫std::sort的人厲害嗎?
01/10 15:50, 18F

01/10 15:54, , 19F
寫程式最笨的就是有現成的不用,而再去寫一個重覆的功能
01/10 15:54, 19F

01/10 20:30, , 20F
你們家最厲害的人真是令我們驚訝....
01/10 20:30, 20F

01/12 07:11, , 21F
他用到背起來,你把這些字背起來幹嘛
01/12 07:11, 21F

01/12 19:53, , 22F
不是知道演算法 就大概知道怎麼做了嗎 ..
01/12 19:53, 22F
文章代碼(AID): #1Khvbo_0 (C_and_CPP)