【问题标题】:Selection Sort using Groovy使用 Groovy 进行选择排序
【发布时间】:2015-05-19 17:26:50
【问题描述】:

这是我使用 Groovy 执行选择排序的代码:

class SelectionSorting {
    void sorting() {
        def sortmethod = {
            List data = [ 1, 5, 2, 3, 7, 4, 6, 8, 9, ]
            def n = data.size()
            println "Before sort : " + data
            for(def i in 0..n) {
                 def position=i
                 for(def j in i+1..n) {
                    if(data[position] > data[i])
                        position=i
                 }
                 if(position!=i) {
                    swap(data[i],data[position])
                 }
            }
            println "After sort : " + data
       }
       sortmethod()
    }
}

SelectionSorting s = new SelectionSorting()
s.sorting()

但是,我看到的输出仍然是一个未排序的数组:

Before sort : [1, 5, 2, 3, 7, 4, 6, 8, 9]
After sort : [1, 5, 2, 3, 7, 4, 6, 8, 9]

我对 Groovy 很陌生。我应该只在闭包中插入逻辑。我不确定在上面的代码中创建的闭包中需要更改什么。请帮忙。

【问题讨论】:

    标签: groovy closures selection-sort


    【解决方案1】:

    你在计算最小值的位置时使用了错误的索引;您应该使用j 而不是i(添加println 以显示迭代):

    def selectionSort = { data ->
        int n = data.size()
        for (int i = 0; i < n - 1; i++) {
            // Find the index (position) of the minimum value
            position = i       
            for(int j = i + 1; j < n; j++) {
                if(data[j] < data[position]) {
                    position = j               
                }
            }
    
            // Swap
            if (position != i) {
                temp = data[position]
                data[position] = data[i]
                data[i] = temp
            }
    
            println data
        }
        println "result: $data"
    }
    

    所以selectionSort([1,5,2,4,3,8,7,9]) 产生:

    [1, 5, 2, 4, 3, 8, 7, 9]
    [1, 2, 5, 4, 3, 8, 7, 9]
    [1, 2, 3, 4, 5, 8, 7, 9]
    [1, 2, 3, 4, 5, 8, 7, 9]
    [1, 2, 3, 4, 5, 8, 7, 9]
    [1, 2, 3, 4, 5, 7, 8, 9]
    [1, 2, 3, 4, 5, 7, 8, 9]
    result: [1, 2, 3, 4, 5, 7, 8, 9]
    

    【讨论】:

    • 又一个很好的例子说明了为什么 i 和 j 是糟糕的索引变量。
    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多