侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

从插入排序来理解 Go 的接口

2022-07-14 星期四 / 0 评论 / 0 点赞 / 37 阅读 / 3834 字

插入排序根据插入排序的思想,我们很容易就可以完成插入排序的代码如下。func insertionSort(data []int) { lo, hi := 0, len(data) for

插入排序

根据插入排序的思想,我们很容易就可以完成插入排序的代码如下。

func insertionSort(data []int) {    lo, hi := 0, len(data)    for i := lo + 1; i < hi; i++ {        for j := i; j > lo && data[j] < data[j-1]; j-- {            data[j], data[j-1] = data[j-1], data[j]        }    }}

我们可以验证一下,确实没有问题。

package mainimport (    "fmt")func main()  {    nums := []int{2, 3, 4, 1, 7, 9, 10, 21, 17}    insertionSort(nums)    fmt.Println(nums)}

代码输出为,结果正确

[1 2 3 4 7 9 10 17 21]

问题

好,现在问题来了,都知道 Go 是静态语言,那么就意味着不同的数据类型可能导致上述的插入排序不可用。比如说,某天产品想要支持 uint32 的插入排序。嗯,很简单,直接 Ctrl+c + Ctrl+c 稍微修改一下。

func insertionSortUint32(data []uint32) {    lo, hi := 0, len(data)    for i := lo + 1; i < hi; i++ {        for j := i; j > lo && data[j] < data[j-1]; j-- {            data[j], data[j-1] = data[j-1], data[j]        }    }}

谁知道哪天产品脑子又抽风,他想要支持 float32 类型的插入排序,代码可能又得加几行。

func insertionSortFloat32(data []float32) {    lo, hi := 0, len(data)    for i := lo + 1; i < hi; i++ {        for j := i; j > lo && data[j] < data[j-1]; j-- {            data[j], data[j-1] = data[j-1], data[j]        }    }}

好像还看得下去,我们知道 Go 中的类型可不止这 3 种,再这么被搞下去是不是要爆炸了?没关系,我们有强大的 IDE 可以快速实现。

广告 广告

评论区