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

时间:2015-09-15 11:34:19

标签: list sorting tcl

我是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

我需要尽快帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

你遇到的问题是这两行:

        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命令改变变量以包含一个新列表,该列表与应用了修改的旧列表相同。它也有效地做到了这一点。

它还会缩短代码。