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

Golang Sort 包 - 模糊排序错误

Golang Sort 包 - 模糊排序错误

Go
MMMHUHU 2022-01-04 11:02:25
我尝试修改标准排序方法,并在排序 Less 界面中添加一定的随机性。什么时候if (u[i] - u[j]) <= 0或者if u[i] < u[j]它按预期工作但是if (u[i] - u[j]) <= rvpanic: runtime error: index out of rangegoroutine 1 [running]:panic(0x176ba0, 0x1040a010)    /usr/local/go/src/runtime/panic.go:464 +0x700main.FuzzySorter.Less(0x10456000, 0x9f, 0x9f, 0x19, 0xffffffff, 0x4, 0x1, 0xd)    /tmp/sandbox201242525/main.go:21 +0x140main.(*FuzzySorter).Less(0x10434140, 0x19, 0xffffffff, 0x5c, 0x1, 0x10434140)    <autogenerated>:3 +0xc0sort.doPivot(0xfef741b0, 0x10434140, 0x19, 0x9f, 0x7, 0x19)    /usr/local/go/src/sort/sort.go:128 +0x280sort.quickSort(0xfef741b0, 0x10434140, 0x19, 0x9f, 0xe, 0xfef741b0)    /usr/local/go/src/sort/sort.go:195 +0xa0sort.Sort(0xfef741b0, 0x10434140)    /usr/local/go/src/sort/sort.go:229 +0x80main.FuzzySorter.Sort(0x10456000, 0x9f, 0x9f, 0x1, 0x0, 0x0, 0x0, 0x1777a0)    /tmp/sandbox201242525/main.go:29 +0xa0main.main()    /tmp/sandbox201242525/main.go:195 +0xc0
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

从 Go 1.8 开始,有一种更简单的方法可以对切片进行排序,而无需您定义新类型。您只需创建一个 Less(匿名)lambda。


a := []int{5, 3, 4, 7, 8, 9}

sort.Slice(a, func(i, j int) bool {

    return a[i] < a[j]

})

for _, v := range a {

    fmt.Println(v)

}

这将按升序排序,如果你想要相反的,只需写 a[i] < a[j]


查看完整回答
反对 回复 2022-01-04
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

据我所知,Go 排序实现需要两个负面比较,例如。Less(i, j)并且Less(j, i)两者都返回 false,它将其视为相等,但不是正数。例如Less(i, j),Less(j, i)不能都返回真。因此,您可以轻松地以逻辑正确和确定性的方式获得所需的结果,只需


if (u[i] - u[j]) < -1 {

        return true

    } else {

        return false

    }

https://play.golang.org/p/VcKI9uzcM9


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号