为了账号安全,请及时绑定邮箱和手机立即绑定

冒泡排序中交换的正确终止条件是什么?

冒泡排序中交换的正确终止条件是什么?

Go
FFIVE 2022-12-19 11:57:12
我正在学习 golang,我正在尝试通过编写冒泡排序和使用指针来工作。package mainimport (    "fmt"    "math/rand")func main() {    testTwo := make([]int, 10)        for i := 0; i <= len(testTwo)-1; i++ {        fmt.Print("\n")        testTwo[i] = rand.Intn(10)    }    for i := 0; i <= len(testTwo)-1; i++ {        for j := i + 1; j <= len(testTwo)-1; j++ {            testTwo[i], testTwo[i+1] = swap(testTwo[i], testTwo[i+1])        }    }}/*Swaps the pointers of two adjacent elements in an array*/func swap(valOne, valTwo int) (int, int) {    valAddress := &valOne    valAddressTwo := &valTwo    if valOne <= valTwo {        temp_address := *valAddressTwo        *valAddressTwo = valOne        *valAddress = temp_address    } else {        temp_address := *valAddress        *valAddress = valTwo        *valAddressTwo = temp_address    }    return valOne, valTwo}这是迄今为止正在做的事情的一个例子。输入切片可能是 [4 1 2 9 8 4 1 5 7 6]。但它没有对所有内容进行排序。[1 4 9 2 4 8 5 1 6 7]。我应该添加另一个条件还是我在交换函数中使用指针的方式有问题?
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

package main


import (

    "fmt"

    "math/rand"

)


func main() {


    testTwo := make([]int, 10)

    for i := 0; i <= len(testTwo)-1; i++ {

        fmt.Print("\n")

        testTwo[i] = rand.Intn(10)

    }


    for i := 0; i <= len(testTwo)-1; i++ {

        for j := i + 1; j <= len(testTwo)-1; j++ {

            if testTwo[i] > testTwo[j] {

                // here we swap pointers

                testTwo[i], testTwo[j] = swap(testTwo[i], testTwo[j])

            }

        }

    }


    fmt.Print(testTwo)

}


/*

GO always sends arguments by value. Pointers cannot be swapped here, unless we use *int

*/

func swap(valOne, valTwo int) (int, int) {

    if valOne <= valTwo {

        return valOne, valTwo


    } else {

        return valTwo, valOne

    }

}


查看完整回答
反对 回复 2022-12-19
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您忘记比较 2 个变量并且错误地使用i+1了 instead of j。


for i := 0; i <= len(testTwo)-1; i++ {

    for j := i + 1; j <= len(testTwo)-1; j++ {

        if testTwo[i] < testTwo[j] {

            testTwo[i], testTwo[j] = swap(testTwo[i], testTwo[j])

        }

    }

}


查看完整回答
反对 回复 2022-12-19
  • 2 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信