// InsertSort /* ------------------------------------------------------ 作者 : Black Ghost 日期 : 2019-03-05 版本 : 0.0.0 ------------------------------------------------------ 插入排序法 理论: 时间复杂度: O(n^2) 最好情况 : O(n) 最坏情况 : O(n^2) 空间复杂度: O(1) 稳定性 : 不稳定 ------------------------------------------------------ 输入 : in 输入矩阵, 1xn 输出 : sol 排序结果 err 解出标志:false-未解出或达到步数上限; true-全部解出 ------------------------------------------------------ */ package goNum // InsertSort 插入排序法 func InsertSort(in Matrix) (Matrix, bool) { /* 插入排序法 输入 : in 输入矩阵, 1xn 输出 : sol 排序结果 err 解出标志:false-未解出或达到步数上限; true-全部解出 */ //判断初值维数 if in.Rows != 1 { panic("Error in goNum.InsertSort: Input Matrix error") } if in.Columns < 1 { panic("Error in goNum.InsertSort: Empty input Matrix") } else if in.Columns == 1 { return in, true } n := in.Columns sol := ZeroMatrix(1, n) var err bool = false //初始化sol for i := 0; i < n; i++ { sol.Data[i] = in.Data[i] } //排序开始 for i := 1; i < n; i++ { index := i - 1 min := sol.Data[i] for (index >= 0) && (sol.Data[index] > min) { sol.Data[index+1] = sol.Data[index] index-- } sol.Data[index+1] = min } err = true return sol, err }