我想知道大家如何记住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程式码
整个要记忆的量就很多
不知道大家有什么撇步可以解决这样的问题吗?
谢谢