首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案中的气泡排序

方案中的气泡排序
EN

Stack Overflow用户
提问于 2013-10-09 00:11:58
回答 2查看 5.2K关注 0票数 4

我正在编写一个递归代码到Bubble排序(通过交换最小到最大)

我只有一次做气泡排序的代码

代码语言:javascript
复制
(define (bubble-up L)  
   (if (null? (cdr L))  
     L   
  (if (< (car L) (cadr L))  
(cons (car L) (bubble-up (cdr L)))  
(cons (cadr L) (bubble-up (cons (car L) (cddr L))))  
  )
 )  

如果我将一个列表放入这段代码中,它将返回末尾最大的列表。

前..。(泡沫塑料‘(8 9 4 2 6 7)) ->’(8 4 2 6 7)

现在,我正试图编写一个代码来执行(冒泡L) N次(列表中的整数数)。

我有这样的代码:

代码语言:javascript
复制
  (define (bubble-sort-aux N L)   
    (cond ((= N 1) (bubble-up L))  
       (else (bubble-sort-aux (- N 1) L)  
  (bubble-up L))))  
(bubble-sort-aux 6 (list 8 9 4 2 6 7))  -> ' (8 4 2 6 7 9)

但是递归似乎没有发生,因为它只排序一次!

任何建议都欢迎,我只是有点困惑!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-09 00:29:16

试试这个:

代码语言:javascript
复制
(define (bubble-sort-aux N L)   
  (cond ((= N 1) (bubble-up L))  
        (else (bubble-sort-aux (- N 1) (bubble-up L)))))  

如果您保持“冒泡”列表的N次数,它将在最后排序。代码的问题是,您没有将bubble-up的结果用于任何东西--但是如果我们将bubble-up返回的值传递给函数的下一个调用,它最终将被排序。现在,该程序如预期的那样工作:

代码语言:javascript
复制
(bubble-sort-aux 6 (list 8 9 4 2 6 7))
=> '(2 4 6 7 8 9)
票数 5
EN

Stack Overflow用户

发布于 2017-02-27 10:00:54

我的实施:

代码语言:javascript
复制
(define (bubble-swap ls)
  (if (null? (cdr ls))
      ls
      (if (> (car ls) (cadr ls))
          (cons (cadr ls) (bubble-swap (cons (car ls) (cddr ls))))
          (cons (car ls) (bubble-swap (cdr ls))))))

(define (len ls)
  (if (null? ls)
      0
      (+ 1 (len (cdr ls)))))

(define (bubblesort_ ls n)
  (if (= n 1)
      ls
      (bubblesort_ (bubble-swap ls) (- n 1))))

(define (bubblesort ls) (bubblesort_ ls (len ls)))

我实现了一个定制的len函数,但如果可用的话,您可以使用标准的length函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19260784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档