Golang算法问题之数组按指定规则排序的方法分析

 更新时间:2017年02月17日 14:32:41   作者:books1958  
这篇文章主要介绍了Golang算法问题之数组按指定规则排序的方法,结合实例形式分析了Go语言数组排序相关算法原理与操作技巧,需要的朋友可以参考下

本文实例讲述了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实现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
}

希望本文所述对大家Go语言程序设计有所帮助。

您可能感兴趣的文章:

相关文章

  • Go语言中JSON文件的读写操作

    Go语言中JSON文件的读写操作

    本文主要介绍了Go语言JSON文件的读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 详解golang中bufio包的实现原理

    详解golang中bufio包的实现原理

    这篇文章主要介绍了详解golang中bufio包的实现原理,通过分析golang中bufio包的源码,来了解为什么bufio能够提高文件读写的效率和速度
    2018-01-01
  • Go简单实现协程方法

    Go简单实现协程方法

    本文主要介绍了Go简单实现协程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12
  • 浅谈Golang Slice切片如何扩容的实现

    浅谈Golang Slice切片如何扩容的实现

    本文主要介绍了浅谈Golang Slice切片如何扩容的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Golang基础教程之字符串string实例详解

    Golang基础教程之字符串string实例详解

    这篇文章主要给大家介绍了关于Golang基础教程之字符串string的相关资料,需要的朋友可以参考下
    2022-07-07
  • Golang中 import cycle not allowed 问题的解决方法

    Golang中 import cycle not allowed 问题

    这篇文章主要介绍了Golang中 import cycle not allowed 问题的解决方法,问题从描述到解决都非常详细,需要的小伙伴可以参考一下
    2022-03-03
  • Golang开发之字符串与切片问题踩坑记录

    Golang开发之字符串与切片问题踩坑记录

    字符串和切片,都是golang常用的两种内置数据类型,最近在日常工作中,遇到了一个字符串切片导致的问题,记录一下排查问题的过程,避免后续在这种场景上踩坑
    2023-07-07
  • Go项目与Docker结合实现高效部署深入探究

    Go项目与Docker结合实现高效部署深入探究

    在现代软件开发中,使用Docker部署应用程序已经成为一种标准实践,本文将深入探讨如何将Go项目与Docker结合,实现高效、可靠的部署过程,通过详细的步骤和丰富的示例,你将能够迅速掌握这一流程
    2023-12-12
  • Go中的函数选项模式(Functional Options Pattern)详解

    Go中的函数选项模式(Functional Options Pattern)详解

    在 Go 语言中,函数选项模式是一种优雅的设计模式,用于处理函数的可选参数,本文将对其进行讲解,准备好了吗,快跟随着本文一探究竟吧
    2023-06-06
  • go doudou开发单体RESTful服务快速上手教程

    go doudou开发单体RESTful服务快速上手教程

    这篇文章主要为大家介绍了go doudou开发单体RESTful服务快速上手教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论