2 回答

TA贡献1802条经验 获得超6个赞
你range
过度sli
意味着你迭代len(sli)
次数所以j
从0
到len(sli)-1
。现在您将 elementj
与 element进行比较j+1
。对于最后一次迭代,这意味着您将 elementlen(sli)-1
与 element进行比较len(sli)
。最后一个索引是问题所在。没有元素len(sli)
,因为sli
的索引从0
到len(sli)-1
。
另请注意,在 Go 中,您可以说sli[i], sli[j] = sli[j], sli[i]
交换两个项目。也就是说,您的代码无法工作,因为在任何i
地方都没有定义。
问题列表中的下一个问题是,这并不是我认为你想要的所有冒泡算法。您只对切片进行一次迭代,但这不会对其进行排序。您将不得不重复您拥有的循环,直到不再发生交换。

TA贡献1864条经验 获得超6个赞
如果我理解正确,您想做自定义实现,但不确定为什么不想使用sortpackage.json 。您可以通过覆盖进行自定义排序go#interface。
例如
您可以在 go 中编写自定义排序并使用 sort 包调用它。基本上您可以覆盖界面的排序功能,并可以根据您的需要更改行为。您可以按照下面的示例创建一个接收数据的结构并覆盖函数 Len() 、 Swap() 、 Less()
type Sortslice struct {
Sli []int
}
func (s Sortslice) Len() int {
return len(s.Sli)
}
func (s Sortslice) Swap(i, j int) {
s.Sli[i], s.Sli[j] = s.Sli[j], s.Sli[i]
}
func (s Sortslice) Less(i, j int) bool {
if s.Sli[i] > s.Sli[j] {
return true
} else {
return false
}
}
构建结构后,您可以将数据传递到其中并使用 sort.sort() 函数在 [] 接口上调用 sort 方法。这将使用您的逻辑对切片进行排序。
var data = []int{5,6,8,1,9,10}
sortedSlice := Sortslice{data}
sort.Sort(sortedSlice);
最好使用它,sort.Sort因为它关心做什么(使用合并排序,快速排序)。
但是,如果您想自己做所有事情,请遵循sort.sort()的源代码并以类似的方式编写您的自定义内容
来源:https ://yourbasic.org/golang/how-to-sort-in-go/
- 2 回答
- 0 关注
- 139 浏览
添加回答
举报