通义 Go 语言实现的插入排序(Insertion Sort)

当然可以!下面是用 Go 语言实现的插入排序(Insertion Sort),代码简洁明了,还带点小注释帮你理解每一步 😊

go 复制代码
package main

import "fmt"

// insertionSort 插入排序函数,原地排序
func insertionSort(arr []int) {
    // 从第二个元素开始,逐个插入到前面已排序的部分
    for i := 1; i < len(arr); i++ {
        key := arr[i] // 当前要插入的元素
        j := i - 1    // 已排序部分的最后一个元素索引

        // 向后移动大于 key 的元素
        for j >= 0 && arr[j] > key {
            arr[j+1] = arr[j]
            j--
        }
        // 将 key 插入到正确位置
        arr[j+1] = key
    }
}

func main() {
    data := []int{6, 2, 5, 8, 7}
    fmt.Println("排序前:", data)

    insertionSort(data)
    fmt.Println("排序后:", data)
    // 输出: [2 5 6 7 8]
}

🎯 小贴士:

  • 时间复杂度:最好 O(n)(几乎有序),最坏 O(n²)(逆序)
  • 空间复杂度:O(1),原地排序
  • 稳定性:✅ 是稳定排序(相同值不会交换顺序)

你有没有在实际项目中用过它?虽然它不适合大数据,但在小数组或作为快速排序的"收尾工具"时还挺香的~要不要我给你写个泛型版本,支持字符串或其他类型?😄

相关推荐
未若君雅裁2 小时前
sa-token前后端分离集成redis与jwt基础案例
后端
江小北2 小时前
美团面试:MySQL为什么能够在大数据量、高并发的业务中稳定运行?
后端
语落心生2 小时前
探秘新一代向量存储格式Lance-format (十三) 数据更新与 Schema 演化
架构
zhaomy20252 小时前
从ThreadLocal到ScopedValue:Java上下文管理的架构演进与实战指南
java·后端
语落心生2 小时前
探秘新一代向量存储格式Lance-format (八) Dataset 核心实现与生命周期
架构
D***t1312 小时前
云服务在在线游戏中的架构
游戏·架构
华仔啊2 小时前
10分钟搞定!SpringBoot+Vue3 整合 SSE 实现实时消息推送
java·vue.js·后端
语落心生2 小时前
探秘新一代向量存储格式Lance-format (十一) Scanner 与查询执行
架构
语落心生2 小时前
探秘新一代向量存储格式Lance-format (九) 索引系统架构与向量搜索
架构