2 回答

TA貢獻1802條經(jīng)驗 獲得超6個贊
你range
過度sli
意味著你迭代len(sli)
次數(shù)所以j
從0
到len(sli)-1
。現(xiàn)在您將 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
地方都沒有定義。
問題列表中的下一個問題是,這并不是我認為你想要的所有冒泡算法。您只對切片進行一次迭代,但這不會對其進行排序。您將不得不重復您擁有的循環(huán),直到不再發(fā)生交換。

TA貢獻1864條經(jīng)驗 獲得超6個贊
如果我理解正確,您想做自定義實現(xiàn),但不確定為什么不想使用sortpackage.json 。您可以通過覆蓋進行自定義排序go#interface。
例如
您可以在 go 中編寫自定義排序并使用 sort 包調(diào)用它。基本上您可以覆蓋界面的排序功能,并可以根據(jù)您的需要更改行為。您可以按照下面的示例創(chuàng)建一個接收數(shù)據(jù)的結(jié)構(gòu)并覆蓋函數(shù) 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
}
}
構(gòu)建結(jié)構(gòu)后,您可以將數(shù)據(jù)傳遞到其中并使用 sort.sort() 函數(shù)在 [] 接口上調(diào)用 sort 方法。這將使用您的邏輯對切片進行排序。
var data = []int{5,6,8,1,9,10}
sortedSlice := Sortslice{data}
sort.Sort(sortedSlice);
最好使用它,sort.Sort因為它關(guān)心做什么(使用合并排序,快速排序)。
但是,如果您想自己做所有事情,請遵循sort.sort()的源代碼并以類似的方式編寫您的自定義內(nèi)容
來源:https ://yourbasic.org/golang/how-to-sort-in-go/
- 2 回答
- 0 關(guān)注
- 114 瀏覽
添加回答
舉報