Golang算法問(wèn)題之?dāng)?shù)組按指定規(guī)則排序的方法分析
本文實(shí)例講述了Golang算法問(wèn)題之?dāng)?shù)組按指定規(guī)則排序的方法。分享給大家供大家參考,具體如下:
給出一個(gè)二維數(shù)組,請(qǐng)將這個(gè)二維數(shù)組按第i列(i從1開(kāi)始)排序,如果第i列相同,則對(duì)相同的行按第i+1列的元素排序,
如果第i+1列的元素也相同,則繼續(xù)比較第i+2列,以此類推,直到最后一列。如果第i列到最后一列都相同,則按原序排列。
樣例輸入:
1,2,3
2,3,4
2,3,1
1,3,1
按第2列排序,輸出:
1,2,3
2,3,1
1,3,1
2,3,4
代碼實(shí)現(xiàn):
import (
"fmt"
"sort"
)
func Test09Base() {
nums := [][]int{{1, 2, 3}, {2, 3, 4}, {2, 3, 1}, {1, 3, 1}}
firstIndex := 2 //按第二列排序
result := arraySort(nums, firstIndex-1)
fmt.Println(result)
}
//按指定規(guī)則對(duì)nums進(jìn)行排序(注:此firstIndex從0開(kāi)始)
func arraySort(nums [][]int, firstIndex int) [][]int {
//檢查
if len(nums) <= 1 {
return nums
}
if firstIndex < 0 || firstIndex > len(nums[0])-1 {
fmt.Println("Warning: Param firstIndex should between 0 and len(nums)-1. The original array is returned.")
return nums
}
//排序
mIntArray := &IntArray{nums, firstIndex}
sort.Sort(mIntArray)
return mIntArray.mArr
}
type IntArray struct {
mArr [][]int
firstIndex int
}
//IntArray實(shí)現(xiàn)sort.Interface接口
func (arr *IntArray) Len() int {
return len(arr.mArr)
}
func (arr *IntArray) Swap(i, j int) {
arr.mArr[i], arr.mArr[j] = arr.mArr[j], arr.mArr[i]
}
func (arr *IntArray) Less(i, j int) bool {
arr1 := arr.mArr[i]
arr2 := arr.mArr[j]
for index := arr.firstIndex; index < len(arr1); index++ {
if arr1[index] < arr2[index] {
return true
} else if arr1[index] > arr2[index] {
return false
}
}
return i < j
}
希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。
相關(guān)文章
Golang實(shí)現(xiàn)組合模式和裝飾模式實(shí)例詳解
這篇文章主要介紹了Golang實(shí)現(xiàn)組合模式和裝飾模式,本文介紹組合模式和裝飾模式,golang實(shí)現(xiàn)兩種模式有共同之處,但在具體應(yīng)用場(chǎng)景有差異。通過(guò)對(duì)比兩個(gè)模式,可以加深理解,需要的朋友可以參考下2022-11-11Go標(biāo)準(zhǔn)庫(kù)http與fasthttp服務(wù)端性能對(duì)比場(chǎng)景分析
這篇文章主要介紹了Go標(biāo)準(zhǔn)庫(kù)http與fasthttp服務(wù)端性能比較,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Go語(yǔ)言Goroutines?泄漏場(chǎng)景與防治解決分析
這篇文章主要為大家介紹了Go語(yǔ)言Goroutines?泄漏場(chǎng)景與防治解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Go語(yǔ)言使用Request,Response處理web頁(yè)面請(qǐng)求
這篇文章主要介紹了Go語(yǔ)言使用Request,Response處理web頁(yè)面請(qǐng)求,需要的朋友可以參考下2022-04-04golang 實(shí)現(xiàn)struct、json、map互相轉(zhuǎn)化
這篇文章主要介紹了golang 實(shí)現(xiàn)struct、json、map互相轉(zhuǎn)化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12詳解golang 模板(template)的常用基本語(yǔ)法
這篇文章主要介紹了詳解golang 模板(template)的常用基本語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08golang 定時(shí)任務(wù)方面time.Sleep和time.Tick的優(yōu)劣對(duì)比分析
這篇文章主要介紹了golang 定時(shí)任務(wù)方面time.Sleep和time.Tick的優(yōu)劣對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05Go語(yǔ)言切片(Slice)深度剖析與應(yīng)用實(shí)戰(zhàn)
在Go語(yǔ)言中,切片(Slice)是一種非常強(qiáng)大且靈活的數(shù)據(jù)結(jié)構(gòu),它基于數(shù)組但又提供了動(dòng)態(tài)調(diào)整大小的能力,本文將結(jié)合實(shí)際案例,詳細(xì)介紹Go語(yǔ)言中切片的聲明、初始化、操作、擴(kuò)容等用法,需要的朋友可以參考下2024-09-09GoLang中生成UUID唯一標(biāo)識(shí)的實(shí)現(xiàn)方法
UUID是讓分散式系統(tǒng)中的所有元素,都能有唯一的辨識(shí)信息,本文主要介紹了GoLang中生成UUID唯一標(biāo)識(shí)的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08