1.4.2 二维数组的排序
对于二位素组的排序,可以通过海鲜
sort.Interfact接口的方法来处理示例:通过数组按照指定规则进行排序,要求:
给出一个二维数组,将二维数组按第
i列(i从1开始)排序;如果第i列相同,则对应的行按第i+1列的元素排序;如果第i+1列的元素也相同,则继续比较第i+2列,以此类推,直到最后一列。如果第i列到最后一列都相同,则按原序列排序示例举例:
给定数组: 1, 9, 5 2, 3, 6 3, 6, 9 1, 8, 3 按照第2列排序,结果如下: 2, 3, 6 3, 6, 9 1, 8, 3 1, 9, 5代码:
package main import ( "fmt" "sort" ) // ArraySort 按照指定规则对二纬数组进行排序 func ArraySort(numArray [][]int, firstIndex int) [][]int { // 检查 if len(numArray) <= 1 { return numArray } if firstIndex < 0 || firstIndex > len(numArray[0])-1 { fmt.Println("指定排序行超过数据长度") return numArray } // 排序 var mIntArray = &IntArray{numArray, firstIndex} sort.Sort(mIntArray) return mIntArray.mArr } type IntArray struct { mArr [][]int firstIndex int } // Len IntArray实现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 } func main() { // 定义一个二维数组 nums := [][]int{{1, 9, 5}, {2, 3, 6}, {3, 6, 9}, {1, 8, 3}} firstIndex := 2 // 按照第2列排序 result := ArraySort(nums, firstIndex-1) fmt.Println(result) }
Last updated