// BubbleSort /* ------------------------------------------------------ 作者 : 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 // BubbleSort 冒泡排序法 func BubbleSort(in Matrix) (Matrix, bool) { /* 冒泡排序法 输入 : in 输入矩阵, 1xn 输出 : sol 排序结果 err 解出标志:false-未解出或达到步数上限; true-全部解出 */ //判断初值维数 if in.Rows != 1 { panic("Error in goNum.BubbleSort: Input Matrix error") } if in.Columns < 1 { panic("Error in goNum.BubbleSort: 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] } //排序开始, 方法1 for i := 0; i < n-1; i++ { for j := 0; j < n-i-1; j++ { if sol.Data[j] > sol.Data[j+1] { sol.Data[j], sol.Data[j+1] = sol.Data[j+1], sol.Data[j] } } } // 方法2 // for isSort { // isSort = false // for j := 0; j < n-1; j++ { // if sol.Data[j] > sol.Data[j+1] { // sol.Data[j], sol.Data[j+1] = sol.Data[j+1], sol.Data[j] // isSort = true // } // } // } err = true return sol, err }