-2

使用任何排序技术

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

不使用 lsort

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

4

1 回答 1

0

虽然我们不会给您答案,但我们可以提出一些有用的建议。例如,您将列表的两个元素(at$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,因为它实现了具有许多良好属性的高效算法,其余的要么不需要排序,要么将问题委托给数据库引擎......)

于 2013-09-30T15:32:08.760 回答