学习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])
只要一行代码搞定一个快速排序, 对, 你没有看错, 这才让我觉得我是在表达自己的思想, 简单优雅
总结: 函数编程确实对一个程序员思想影响很大, 也更善于去表达要写的东西。。。