我想知道大家如何記住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程式碼
整個要記憶的量就很多
不知道大家有什麼撇步可以解決這樣的問題嗎?
謝謝