write_readable_select_sort
最近在看the art of readable code,突然想起来,自己以前写的代码都不易懂。 以选择排序为例,我以前是直接把它记住的(当然是在理解的前提下),其中的一些 下标i,j,k,直接记住人家的代码的,如果要我重新写,我还是会用i,j,k,造成了 硬性的思维,现在看来,只要记住算法,用自己的方式来写出的代码才是好的代码。 下面的选择排序是经典的课本上的代码:
void select_sort(int *arr,int len)
{
int i,j,k,temp;
for(i = 0; i < len - 1; i++){
k = i;
for(j = i + 1; j < len; j++){
if(arr[j] < arr[k]){
k = j;
}
}
if(i != k){
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
}
我觉得,有经验的程序员看上面这份代码当然是没问题,但是给初学者来看,i,j,k分别 代表什么意思,他就会摸不着头脑了,所以,我们需要给变量的名字赋予意义,更容易 理解,于是我写了下面的代码。
void select_sort(int *arr,int len)
{
int current,next,smallest,temp;
for(current = 0; current < len - 1; current++){
smallest = current;
for(next = current + 1; next < len; next++){
if(arr[next] < arr[smallest]){
smallest = next;
}
}
if(current != smallest){
temp = arr[smallest];
arr[smallest] = arr[current];
arr[current] = temp;
}
}
}
这样的话,单从变量名字就可以理解整个算法的思想了。虽然变量的名字是长了一点, 但是现在的编辑器或者IDE的自动补全功能这么强大,变量名太长这个已经不是问题了。