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

作者: chessjim (我沒有暱稱)   2015-01-09 17:03:43
我想知道大家如何記住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程式碼
整個要記憶的量就很多
不知道大家有什麼撇步可以解決這樣的問題嗎?
謝謝
作者: LPH66 (-6.2598534e+18f)   2015-01-09 17:07:00
call qsort() in <cstdlib> ?
作者: Killercat (殺人貓™)   2015-01-09 17:48:00
為什麼要記.......
作者: azureblaze (AzureBlaze)   2015-01-09 18:04:00
你的function做的事太多需要refactor取一個元素分成比他大比他小的兩堆分別排序再串起來。然後請理解分堆的原理,如果需要背這個行業不太適合你
作者: descent (「雄辯是銀,沉默是金」)   2015-01-09 18:14:00
我有背演算法原理, 沒有背程式碼怎麼寫
作者: carylorrk (carylorrk)   2015-01-09 18:26:00
常用到的自然會記得,用不到的也不需要去記。
作者: littleshan (我要加入劍道社!)   2015-01-09 18:29:00
幹嘛背這個啦(暈) 你要記的就只有一句話而已也就是azureblaze說的分兩堆 → 分別排序 → 串起來
作者: kwpn (ITSST)   2015-01-09 18:34:00
c/c++ library都有提供,為什麼要記? 你有寫的比較好嗎
作者: michael0728n (蒜˙遠古)   2015-01-09 18:59:00
要面試吼XDDDD? <---上面那句推文是問句XD
作者: cjcat2266 (CJ Cat)   2015-01-10 03:01:00
背程式碼不實際又不實用理解演算法和理解使用的語言比較實在
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-01-10 13:33:00
因為最厲害的人用所以要背 你暗戀他是不是
作者: azureblaze (AzureBlaze)   2015-01-10 14:01:00
我以為最厲害的人都直接std::sort除非他們有什麼超厲害的特殊需求
作者: kwpn (ITSST)   2015-01-10 15:50:00
你們公司最厲害的人有比寫std::sort的人厲害嗎?寫程式最笨的就是有現成的不用,而再去寫一個重覆的功能
作者: Killercat (殺人貓™)   2015-01-10 20:30:00
你們家最厲害的人真是令我們驚訝....
作者: fgkor123 (n(N))   2015-01-12 07:11:00
他用到背起來,你把這些字背起來幹嘛
作者: jenocool   2015-01-12 19:53:00
不是知道演算法 就大概知道怎麼做了嗎 ..

Links booklink

Contact Us: admin [ a t ] ucptt.com