Golang算法问题之数组按指定规则排序的方法分析
本文实例讲述了Golang算法问题之数组按指定规则排序的方法。分享给大家供大家参考,具体如下:
给出一个二维数组,请将这个二维数组按第i列(i从1开始)排序,如果第i列相同,则对相同的行按第i+1列的元素排序,
如果第i+1列的元素也相同,则继续比较第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
代码实现:
packagehuawei
import(
"fmt"
"sort"
)
funcTest09Base(){
nums:=[][]int{{1,2,3},{2,3,4},{2,3,1},{1,3,1}}
firstIndex:=2//按第二列排序
result:=arraySort(nums,firstIndex-1)
fmt.Println(result)
}
//按指定规则对nums进行排序(注:此firstIndex从0开始)
funcarraySort(nums[][]int,firstIndexint)[][]int{
//检查
iflen(nums)<=1{
returnnums
}
iffirstIndex<0||firstIndex>len(nums[0])-1{
fmt.Println("Warning:ParamfirstIndexshouldbetween0andlen(nums)-1.Theoriginalarrayisreturned.")
returnnums
}
//排序
mIntArray:=&IntArray{nums,firstIndex}
sort.Sort(mIntArray)
returnmIntArray.mArr
}
typeIntArraystruct{
mArr [][]int
firstIndexint
}
//IntArray实现sort.Interface接口
func(arr*IntArray)Len()int{
returnlen(arr.mArr)
}
func(arr*IntArray)Swap(i,jint){
arr.mArr[i],arr.mArr[j]=arr.mArr[j],arr.mArr[i]
}
func(arr*IntArray)Less(i,jint)bool{
arr1:=arr.mArr[i]
arr2:=arr.mArr[j]
forindex:=arr.firstIndex;index<len(arr1);index++{
ifarr1[index]<arr2[index]{
returntrue
}elseifarr1[index]>arr2[index]{
returnfalse
}
}
returni<j
}
希望本文所述对大家Go语言程序设计有所帮助。