不使用内置函数对列表进行排序

Sort a list without using built-in function

我是 Tcl 的新手,正在尝试这样做:

sortList :: { 3 6 8 7 0 1 4 2 9 5 } -> { 0 1 2 3 4 5 6 7 8 9 }

这是我的代码:

set lst [list 3 6 8 7 0 1 4 2 9 5]
for {set i 0} {$i < [llength "$lst"]} {incr i} {
    for {set j 0} {$j < [llength "$lst"]-1 } {incr j} {
        if {[lindex $lst $j] > [lindex $lst $j+1]} { 
            set min [lindex $lst $j+1]
            set [lindex $lst $j+1] [lindex $lst $j]
            set [lindex $lst $j] $min
        }
    }
}
puts $lst

但它一直打印相同的列表:

3 6 8 7 0 1 4 2 9 5

我需要尽快得到帮助,谢谢。

你遇到的问题是这两行:

        set [lindex $lst $j+1] [lindex $lst $j]
        set [lindex $lst $j] $min

这些将更新名称恰好是小整数的变量(因为这是您列表中的内容);不是你想要的!

修改一个列表的元素,你应该使用lset命令:

        lset list $j+1 [lindex $lst $j]
        lset lst $j $min

这是因为列表是值; lset 命令改变一个变量以包含一个新列表,该列表与旧列表相同并应用了修改。它也能有效地做到这一点。

它也使代码更短。