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的自动补全功能这么强大,变量名太长这个已经不是问题了。