Go语言实现冒泡、快速、选择与插入排序算法

小岛来信
小岛来信
发布时间:2026-10-15| 2人浏览过
原创

本文将使用Go语言深入解析四种最常用的基础排序算法:冒泡排序、快速排序、选择排序与插入排序。文章涵盖各算法的执行逻辑、优缺点对比以及完整的可运行代码片段,适合希望巩固数据结构基础或准备技术面试的开发者参考。

算法实现目标

排序算法是计算机科学中的核心基础,广泛应用于数据整理、查询优化等场景。在Go语言的工程实践中,了解这些底层算法有助于处理小规模数据定制排序或面试考核。我们将通过四个独立模块演示如何在Go中高效实现这些逻辑。

冒泡排序

第1步:理解执行逻辑

冒泡排序(Bubble Sort)通过重复遍历列表,比较相邻元素并在顺序错误时交换它们来实现。较大的值会逐渐“沉”到数组末尾,较小的值则“冒”到前端。

关键特征:

  • 时间复杂度:O(N2),适用于小数据集。
  • 空间复杂度:O(1),属于原地排序算法。

第2步:Go语言代码实现

以下代码实现了带优化标志的冒泡排序。若某轮遍历未发生任何交换,说明数组已有序,直接提前结束。

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
}

快速排序

第1步:理解执行逻辑

快速排序(Quick Sort)采用分治法策略。它选择一个基准元素(如首元素),将数组分为两部分:左边小于基准,右边大于基准。随后对这两部分递归执行相同操作。

关键特征:

  • 时间复杂度:平均 O(n log n),最坏情况 O(n2)。
  • 空间复杂度:O(1)(指额外分配的非递归栈空间,注意此处的非原地版本)。

第2步:Go语言代码实现

这里使用一种简洁且易读的非原地分区方式,利用切片操作简化逻辑。

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...)
}

选择排序

第1步:理解执行逻辑

选择排序(Selection Sort)每次从未排序区间中找到最小(大)元素,将其放到已排序区间的末尾。虽然简单直观,但在大数据量下效率较低。

关键特征:

  • 时间复杂度:O(n2)。
  • 空间复杂度:O(1)。

第2步:Go语言代码实现

func selectSort(list []int) []int {
	length := len(list)

	for i := 0; i < length; i++ {
		minIndex := i
		// 在剩余未排序区间寻找最小值的索引
		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
}

插入排序

第1步:理解执行逻辑

插入排序(Insertion Sort)类似整理扑克牌。它将未排序的元素逐个插入到已排序序列的正确位置中。对于接近有序的数据,其表现非常优异。

关键特征:

  • 时间复杂度:O(N2).
  • 空间复杂度:O(1).

第2步:Go语言代码实现

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
}

总结与验证

上述四种算法涵盖了O(N2)与O(n log n)两个典型的时间复杂度区间。在实际开发中,Go内置的 sort.Slice 通常基于Timsort或快速排序实现,性能远优于手动实现的朴素排序。然而,掌握这些基础算法的逻辑不仅有助于应对技术面试,更能培养我们在面对特定边界条件时自定义排序逻辑的能力。

以上就是Go语言实现常用排序算法的详细内容,更多关于Go语言排序算法教学资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。