簡體   English   中英

方案中的冒泡排序程序

[英]bubble-sort procedure in scheme

我不明白為什么(bubble-sort!(vector 2 1))用我的代碼返回#(2 2)。

(define (bubble-sort! v)
    (define (helper c orig-v n)
    (cond
        ((< n 0)
            v)
        ((> c n)
            (helper 0 v (- n 1)))
        ((>= (vector-ref orig-v c) (vector-ref orig-v (+ c 1)))
            (begin
                (vector-set! v (+ c 1) (vector-ref orig-v c))
                (vector-set! v c (vector-ref orig-v (+ c 1)))
                (helper (+ c 1) v n)))
        (else
            (helper (+ c 1) v n))))
(helper 0 v (- (vector-length v) 2)))

我本人已遍歷代碼,但未發現問題。

在代碼vorig-v中是相同的向量(如果將向量作為參數傳遞,則不會復制向量:這類似於“按引用調用”,因為在其他語言中稱為“按引用調用”)。

因此,在函數內部,您將處理作為參數傳遞的向量以及兩個表達式:

(vector-set! v (+ c 1) (vector-ref orig-v c))
(vector-set! v c (vector-ref orig-v (+ c 1)))

等效於:

(vector-set! orig-v (+ c 1) (vector-ref orig-v c))
(vector-set! orig-v c (vector-ref orig-v (+ c 1)))

因此,將2復制到第二個元素(包含1)中,然后將2復制回到第一個元素中,最終結果為#(2,2)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM