Golang算法问题之数组按指定规则排序的方法分析
2018-09-22 01:12
本文实例讲述了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
  代码实现:
 复制代码 代码如下:package huawei
 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)
 }
 //按指定规则对nums进行排序(注:此firstIndex从0开始)
 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实现erface接口
 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
 }
希望本文所述对大家Go语言程序设计有所帮助。
下一篇:Go语言排序与接口实例分析
文章标题:Golang算法问题之数组按指定规则排序的方法分析
文章链接:http://soscw.com/index.php/essay/17199.html