TCL排序程序不使用lsort

时间:2013-09-30 10:28:42

标签: sorting tcl

使用任何排序技术

数组变量arr包含: arr {1 5 2 9 3 8 10 6}

不使用lsort

最后o / p在同一个数组变量中: arr {1 2 3 5 6 8 9 10}

1 个答案:

答案 0 :(得分:0)

虽然我们不会给你答案,但我们可以提出一些有用的建议。例如,您将列表中的两个元素($idx1$idx2)与此进行比较:

string compare [lindex $theList $idx1] [lindex $theList $idx2]

您可以使用此过程交换这两个元素:

proc swap {nameOfListVar idx1 idx2} {
    upvar 1 $nameOfListVar theList
    set tmp [lindex $theList $idx1]
    lset theList $idx1 [lindex $theList $idx2]
    lset theList $idx2 $tmp
    return
}

您可以称之为:

# Pass the list variable *name*
swap theList $idx1 $idx2

通常,你可以这样做一个排序算法:

  • 虽然列表未排序,
    • 以错误的顺序找到一对元素并交换它们。

其他一切都是优化。 (请记住,真正的Tcl程序只使用lsort,因为它实现了一个具有许多优良属性的高效算法,其余的不需要排序或将问题委托给数据库引擎......)