如果是只有這幾個的搭兄話 我們可以考慮自定義一個排序類型
專注于為中小企業(yè)提供網(wǎng)站設計、成都做網(wǎng)站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)禹州免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
func TestSort(t *testing.T) {
data := []string{"三級", "一級", "二級"}
rule := map[string]int{
"一級": 1,
"二級": 2,
"三級": 3,
}
self := SelfSort{
Rule: rule,
Data: data,
}
sort.Sort(self)
fmt.Println(self.Data)
}
type SelfSort struct {
Rule map[string]int
Data []string
}
func (p SelfSort) Len() int?知猜襲 ? ? ? ? ?{ return len(p.Data) }
func (p SelfSort) Less(i, j int) bool { return p.Rule[p.Data[i]] p.Rule[p.Data[j]] }
func (p SelfSort) Swap(i, j int)? ? ? { p.Data[i], p.Data[j] = p.Data[j], p.Data[i] }
如過很多 就是真的要比較中文的話, 就用這種
package mainimport ( ? ?"bytes"
"fmt"
"io/ioutil"
"sort"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform")//ByPinyin is customized sort interface to sort string by Chinese PinYintype ByPinyin []stringfunc (s ByPinyin) Len() int ? ? ?{ return len(s) }func (s ByPinyin) Swap(i, j int) { s[i], s[j] = s[j], s[i] }func (s ByPinyin) Less(i, j int) bool {
a, _ := UTF82GBK(s[i])
b, _ := UTF82GBK(s[j])
bLen := len(b) ? ?for idx, chr := range a { ? ? ? ?if idx bLen-1 { ? ? ? ? ? ?return false
} ? ? ? ?if chr != b[idx] { ? ? ? ? ? ?return chr b[idx]
}
} ? ?return true}//UTF82GBK : transform UTF8 rune into GBK byte arrayfunc UTF82GBK(src string) ([]byte, error) {
GB18030 := simplifiedchinese.All[0] ? ?return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
}//GBK2UTF8 : transform ?GBK byte array into UTF8 stringfunc GBK2UTF8(src []byte) (string, error) {
GB18030 := simplifiedchinese.All[0]
bytes, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(src), GB18030.NewDecoder())) ? ?return string(bytes), err
}func main() {
b := []string{"哈", "呼", "嚯", "ha", ","}
sort.Strings(b) ? ?//output: [, ha 呼 哈 嚯兆碧]
fmt.Println("Default sort: ", b)
sort.Sort(ByPinyin(b)) ? ?//output: [, ha 哈 呼 嚯]
fmt.Println("By Pinyin sort: ", b)
}
copy from?網(wǎng)頁鏈接
快速排序是大多數(shù)語言內(nèi)置 sort 函數(shù)的默認實現(xiàn)方式,簡單可分為兩路排序和三路排序,我在相關資料中,發(fā)現(xiàn)兩路排序也有多種實現(xiàn)方式。
兩路快排的邏輯
這個名詞來自于 b 站的評論,這個快排思路很容易理解,非常適合入門
大體上和第一個版本差不多答檔塌,但是函數(shù)更加簡潔蠢改了,
這個版本是所有快速排序中,看起來比較難以理解,只有一個指針,從左到右滑動,設計非常巧妙。
這邊測試了清圓四種情況,中間值最優(yōu)。
用了3個指針,表示小于,等于,大于三個部分,從而減少相等的數(shù)在其中來回交換。
由此可見快速排序是一種不穩(wěn)定的排序,對于數(shù)據(jù)本身是有要求,對于 pivot 如何取也是有要求,屬于經(jīng)驗取值了,如果對于源數(shù)據(jù)是逆序的情形,快排會退化成冒泡。
2021年03月18日22:24 更新
Go 語言提供了sort包,可以用來排序。但需要排序的對象必須實現(xiàn)sort.Interface接陸遲口。
sort.Interface 定義:
現(xiàn)在需早斗李銷橘要對一群人按年齡升序排序,首先定義Human類型
然后定義集合類型Humans
Humans 實現(xiàn)sort.Interface接口
升序排序
降序排序
Go語言標準庫中提供了sort包對整型,浮點型,字符串型切片進行排序,檢查一個切片是否排好序,使用二分法搜索函數(shù)在一個有序切片中搜索一個元素等功能。
關于sort包內(nèi)的函數(shù)說明與使用,請查看
在這里簡單講幾個sort包中常用的函數(shù)
在Go語言中,對字符串的排序都是按照字節(jié)排序,也就是說在對字符串排序時是區(qū)分大小寫的。
二分搜索算法
Go語言中提供了一個使用二分搜索算法的sort.Search(size,fn)方液段灶法:每次只需要比較㏒?n個元素,其中n為切片中元素的總數(shù)。
sort.Search(size,fn)函數(shù)接受兩個參數(shù):所處理的切片的長度和一個將目標元素與有序切片的元素相比較的函數(shù),該函數(shù)是一個閉包,如果該有序切片是鬧扮升序排列,那么在判斷時使用 有序切片的元素 = 目燃旁標元素。該函數(shù)返回一個int值,表示與目標元素相同的切片元素的索引。
在切片中查找出某個與目標字符串相同的元素索引
當前名稱:go語言sort go語言sort排序
網(wǎng)站地址:http://jinyejixie.com/article0/ddpieoo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站建設、商城網(wǎng)站、App開發(fā)、網(wǎng)站營銷、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)