插入排序根据插入排序的思想,我们很容易就可以完成插入排序的代码如下。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 可以快速实现。
