go 语言可以直接将函数作为参数传入函数中
定义需要传入的函数
func minMaxComp(v1, v2 int)(r int) { if v1 == v2 { r = 1 return } if v1 > v2 { r = 2 return } r = 3 return }定义主函数
func min2maxSort(array []int, comp func(value1,value2 int) int)(targetArray []int) { targetArray = append(targetArray, array[0]) for j:= 1; j < len(array) ; j++ { targetArray = append(targetArray, array[j]) for i, last := len(targetArray) -2 , len(targetArray)-1; i >= 0; i--{ result := comp(targetArray[i], targetArray[last]); if result == 2 { targetArray[i], targetArray[last] = targetArray[last], targetArray[i] last = i //todo swap last , i } } } return }
调用测试
func TestMin2MaxSort(t *testing.T) { array := []int{ 1,2,3,4,4,2,3,1} sortArray := min2maxSort(array, minMaxComp) if nil == sortArray{ t.Error("Sort Error!") return } tmpArray := []int{1,1,2,2,3,3,4,4} if !equals(sortArray,tmpArray) { t.Error("Sort Error!") return }