学习scheme之后写的快排

最近学了一下scheme, 虽说没有很深入用它写东西, 但是scheme的思想还是有所体会的, 

 

要学会用编程语言来表达自己的思想。。。

 

于是决定用写个快排试试, 当然不是用scheme写的, 是用c 和 python 写的。

 

c 语言版, 写的时候一堆要考虑的细节, 从表达思想到语言细节一直来回穿插, 一下考虑数组, 一下考虑指针, 

也许是我c 语言还没有学到家吧。

中途还参考了这篇文章中 partion 函数的实现, 写完来来回回花了一个多小时。  好吧, 我的确在语言细节方面折腾了

很久

代码:

#include <stdio.h>
#include <stdlib.h>

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partion(int *array, int start, int end)
{ 
    int i = start, j = end, key = array[start];
    while(1) {
        while(j>i && array[j]>key) j--;
        while(i<j && array[i]<=key) i++;
        if(i >= j) break;
        swap(&array[i], &array[j]);
    }
    swap(&array[start], &array[j]);
    return j;
}

void quick_sort(int *array, int start, int end)
{
    if(start >= end) return;

    int mid = partion(array, start, end);
    quick_sort(array, start, mid-1);
    quick_sort(array, mid+1, end);
}

int main(int argc, const char *argv[])
{
    int i;
    int a[] = {8, 6, 9, 1, 3, 2, 5};
    quick_sort(a, 0, 6);
    for (i = 0; i < 7; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}

轻松随意的40多行代码。。。 思想还是表达出来了, 但是为什么花那么多时间呢???

 

于是乎: python版本 我只花了3分钟就写出来了, 一次通过, 连调试的机会都没有

1 #!/usr/bin/env python
2 #coding: 'utf-8'
2 3 def qsort(lst): 4 return [] if lst == [] else qsort([x for x in lst[1:] if x <= lst[0]]) +[lst[0]] + qsort([x for x in lst[1:] if x > lst[0]]) 5 6 if __name__ == '__main__': 7 print qsort([3, 7, 2, 1, 8, 9, 6])

只要一行代码搞定一个快速排序, 对, 你没有看错, 这才让我觉得我是在表达自己的思想, 简单优雅

 

总结: 函数编程确实对一个程序员思想影响很大, 也更善于去表达要写的东西。。。

posted @ 2012-09-11 11:51  run-forever  阅读(267)  评论(0编辑  收藏  举报