脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go语言实现常用排序算法的示例代码

Go语言实现常用排序算法的示例代码

2022-11-08 10:50yi个俗人 Golang

排序算法是在生活中随处可见,也是算法基础,因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。本文为大家整理了一些Go语言中常用排序算法的实现,需要的可以参考一下

排序算法是在生活中随处可见,也是算法基础,因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题,可以说是每个程序员都必须得掌握的了。为了方便大家学习,花了一天的时间用Go语言实现一下常用的算法且整理了一下,如有需要可以参考。

冒泡排序

Go语言实现常用排序算法的示例代码

思路:从前往后对相邻的两个元素依次进行比较,让较大的数往下沉,较小的网上冒,即每当两个相邻的元素比较后发现他们的排序要求相反时,就将它们互换。

时间复杂度:O(N^2)

空间复杂度:O(1)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func main() {
    fmt.Println(bubbleSort([]int{2, 4, 1, 6, 3}))
}
 
func bubbleSort(list []int) []int {
    lenth := len(list)
    for i := 0; i <= lenth; i++ {//循环对比的轮数
        exchange := false
        for j := 1; j < lenth-i; j++ {//当前轮相邻元素循环对比
            if list[j-1] > list[j]{//如果前边的大于后边的
                list[j-1], list[j] = list[j], list[j-1]//交换数据
                exchange = true
            }
        }
        if !exchange {
            break
        }
    }
    return list
}

快速排序

思路:以一个基准数将数组拆分为两组,一边大于这个数,一边小于这个数,再最左右两个组重复这个过程,直到各个区域只有一个数。

时间复杂度:O(nlogn)

空间复杂度:O(1)

Go语言实现常用排序算法的示例代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func quickSort(list []int) []int {
    length := len(list)
    if length <= 1 {
        return list
    }
    //基准值
    base := list[0]
    left := make([]int, 0)
    right := make([]int, 0)
    for i := 1; i < length; i++ {
        if list[i]  > base {
            right  = append(right, list[i])
        } else {
            left = append(left, list[i])
        }
    }
    left, right  = quickSort(left), quickSort(right)
    return append(append(left, base),right...)
}

选择排序

思路:首先找到数组中的最小元素,然后将这个最小元素和数组的第一个元素交换位置,如果第一个元素就是最小元素,就和自己交换位置;再次,在剩下的元素中找到最小元素和数组中的第二个元素交换位置,如此往复,直到将整个数组排序,一句话总结就是,不断在剩余元素中找最小元素。

时间复杂度:O(n^2)

空间复杂度:O(1)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func selectSort(list []int) []int {
    length := len(list)
 
    for i := 0; i < length; i++ {
        minIndex := i
        //每次循环找出i+1到最后一个元素区间的最小值,然后当前元素和当前最小值比较
        for j := i + 1; j < length; j++ {
            if list[j] < list[minIndex] {
                minIndex = j
            }
        }
        if i != minIndex {
            list[i], list[minIndex] = list[minIndex], list[i]
        }
    }
    return list
}

插入排序

Go语言实现常用排序算法的示例代码

思路:与选择排序一样,当前索引左边的所有元素都是有序的,但是他们的最终位置还不确定,为了给更小的元素腾出空间,他们可能会被移动,但是当索引到达数组的末端,数组排序就完成了。

时间复杂度:O(N^2)

空间复杂度:O(1)

?
1
2
3
4
5
6
7
8
9
10
11
12
func insertSort(list []int) []int {
    length := len(list)
    for i := 0; i < length; i++ {
        for j := i; j > 0; j-- {
            if list[j] > list[j-1] {
                break
            }
            list[j], list[j-1] = list[j-1], list[j]
        }
    }
    return list
}

排序思路算法几乎一样。 暂时就介绍这几种常用的也是面试中经常问道的排序算法。

到此这篇关于Go语言实现常用排序算法的示例代码的文章就介绍到这了,更多相关Go语言排序算法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7130090981658984461

延伸 · 阅读

精彩推荐
  • Golang浅谈go中cgo的几种使用方式

    浅谈go中cgo的几种使用方式

    本文主要介绍了浅谈go中cgo的几种使用方式,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Yuan_sr11612022-09-09
  • Golanggolang如何实现mapreduce单进程版本详解

    golang如何实现mapreduce单进程版本详解

    这篇文章主要给大家介绍了关于golang如何实现mapreduce单进程版本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    VINLLEN CHEN4932020-05-13
  • Golanggo实现图片拼接与文字书写的方法实例

    go实现图片拼接与文字书写的方法实例

    这篇文章主要给大家介绍了关于go实现图片拼接与文字书写的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    Yasin_Copeleft4732022-09-01
  • Golang详解go语言json的使用技巧

    详解go语言json的使用技巧

    这篇文章主要介绍了详解go语言json的使用技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    王中阳Go10792021-04-22
  • Golanggolang操作连接数据库实现mysql事务示例

    golang操作连接数据库实现mysql事务示例

    这篇文章主要为大家介绍了golang操作连接数据库实现mysql事务示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪...

    Jeff的技术栈7562022-09-15
  • Golanggolang 如何用反射reflect操作结构体

    golang 如何用反射reflect操作结构体

    这篇文章主要介绍了golang 用反射reflect操作结构体的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    皿小草11672021-06-06
  • GolangGo语言HttpRouter路由使用方法详解

    Go语言HttpRouter路由使用方法详解

    这篇文章主要介绍了Go语言HttpRouter路由使用方法详解,需要的朋友可以参考下...

    骏马金龙10882022-09-24
  • Golanggo语言中sort包的实现方法与应用详解

    go语言中sort包的实现方法与应用详解

    golang中也实现了排序算法的包sort包,所以下面这篇文章主要给大家介绍了关于go语言中sort包的实现方法与应用的相关资料,文中通过示例代码介绍的非常详...

    Mr_len5152020-05-10