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语言程序设计有所帮助。