[問題] 如何記憶quick_sort程式碼
我想知道大家如何記住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
01/09 17:07, 1F
推
01/09 17:48, , 2F
01/09 17:48, 2F
→
01/09 18:04, , 3F
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
01/09 18:30, 9F
推
01/09 18:34, , 10F
01/09 18:34, 10F
→
01/09 18:59, , 11F
01/09 18:59, 11F
→
01/09 18:59, , 12F
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
01/10 14:01, 16F
→
01/10 14:02, , 17F
01/10 14:02, 17F
推
01/10 15:50, , 18F
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