Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23381
  • 博文数量: 3
  • 博客积分: 161
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-08 10:50
文章分类

全部博文(3)

文章存档

2013年(1)

2011年(2)

分类: C/C++

2011-04-07 21:42:26

今天在图书馆无意借到一本写scheme的书,随手翻了翻,没学过lisp感觉很特别,里面有一段排序的代码,挺有意思的,顺手用C++改写了下,原scheme程序如下:
  1. (define (sort alon)

  2. (cond

  3. [empty alon) empty]

  4. [else (insert (first alon)(sort (rest alon)))]))

  5. (define (insert n alon)

  6. (cond

  7. [(empty? alon) ...]

  8. [else ... (first alon) ... (insert n (rest alon)) ...]))


=============================================================

(define (a-sort a-list)
  (cond
    [(empty? a-list) empty]
    [else (insert (first a-list ) (a-sort (rest a-list)))]))
   
(define (insert a a-list)
  (cond
    [(empty? a-list) (cons a empty)]
    [else (cond
            [(< a (first a-list)) (cons (first a-list)(insert a (rest a-list)))]
            [else (cons a a-list)])]))

根据这段程序,我们也可以写两个函数来实现排序,sort 和 insert:

 

  1. //============================================================================

  2. // Name : sort.cpp

  3. // Author : Rick

  4. // Version :

  5. // Copyright : Your copyright notice

  6. // Description : Hello World in C++, Ansi-style

  7. //============================================================================


  8. #include <iostream>
  9. using namespace std;
  10. void sort(int array[], int n);
  11. void insert(int *p, int array[], int n);
  12. int main() {
  13.     int a[10]={1,3,7,4,5,6,7,8,9,0};
  14.     sort(a,10);
  15.     for(int i=0;i<10;i++)
  16.         cout<<a[i]<<endl;
  17.     return 0;
  18. }

  19. void sort(int array[], int n) {
  20.     if (n <= 2) {
  21.         if (array[0] < array[1]) {
  22.             int temp = array[0];
  23.             array[0] = array[1];
  24.             array[1] = temp;
  25.         }
  26.     } else {
  27.         sort(array + 1, n - 1);
  28.         insert(array, array + 1, n - 1);
  29.     }
  30. }
  31. void insert(int *p, int array[], int n) {
  32.     if (n > 1) {
  33.         if (*p < array[0]) {
  34.             int temp = *p;
  35.             *p = array[0];
  36.             array[0] = temp;
  37.             insert(array, array + 1, n - 1);
  38.         }
  39.     } else {
  40.         if (*p < array[0]) {
  41.             int temp = *p;
  42.             *p = array[0];
  43.             array[0] = temp;
  44.         }
  45.     }
  46. }

排序的效果还不错,只是复杂度不知道是多少。。。。

 

阅读(1696) | 评论(0) | 转发(0) |
0

上一篇:多位整数乘法

下一篇:Oracle 蜻蜓点水

给主人留下些什么吧!~~