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 包調用它?;旧夏梢愿采w界面的排序功能,并可以根據您的需要更改行為。您可以按照下面的示例創建一個接收數據的結構并覆蓋函數 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 關注
- 119 瀏覽
添加回答
舉報