1 Star 0 Fork 0

liuluopeng / go_DSA

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sortTestHelper.go 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
liuluopeng 提交于 2020-12-12 02:07 . 好久之后
package sortTestHelper
import (
"fmt"
"math/rand"
"reflect"
"runtime"
"time"
)
// 生成一个随机数组
func GenerateRandomArray(length, rangeL, rangeR int) []int {
rand.Seed(time.Now().UnixNano())
arr := make([]int, length)
for i := 0; i < length; i++ {
arr[i] = rand.Int()%(rangeR-rangeL+1) + rangeL
}
return arr
}
// 生成一个数组 这个数组的大部分区间都是有序的
func GenerateAlmostSortedArray(length, swapTimes int) []int {
arr := make([]int, length)
for i := 0; i < length; i++ {
arr[i] = i
}
rand.Seed(time.Now().UnixNano())
// 随机交换 swapTimes 次
for i := 0; i < swapTimes; i++ {
index1 := rand.Int() % length
index2 := rand.Int() % length
arr[index1], arr[index2] = arr[index2], arr[index1]
}
return arr
}
// 复制数组 方便比较不同算法
func CopyArray(arr []int) []int {
arr2 := make([]int, len(arr))
for i := 0; i < len(arr); i++ {
arr2[i] = arr[i]
}
return arr2
}
// IsSorted 验证排序算法的正确性 从小到大排序
func IsSorted(arr []int) bool {
for i := 0; i < len(arr)-1; i++ {
if arr[i] > arr[i+1] {
fmt.Println(arr[i], arr[i+1])
return false
//return true
}
}
return true
}
// IsOrig 验证是否是原来的数组排序的 验证数据变化了没有
func IsOrig(beforeArr, afterArr []int) bool {
return true
map1 := make(map[int]int)
map2 := make(map[int]int)
for _, v := range beforeArr {
map1[v]++
}
for _, v := range afterArr {
map2[v]++
}
if len(map1) != len(map2) {
fmt.Println(len(map1), map1, "\n", len(map2), map2)
return false
}
for key := range map1 {
if map1[key] != map2[key] {
fmt.Println(key, map1[key], map2[key])
return false
}
}
return true
}
// 排序算法 测试助手 帮助生成随机数组、判断排序正确性、计时
func SortTest(sort func(arr []int), arr []int) {
// arr := GenerateRandomArray(n, rangeL, rangeR)
// 获取排序函数的名称
p := reflect.ValueOf(sort).Pointer()
sortName := runtime.FuncForPC(p).Name()
// 复制一份原来的数组 来查看数组改动了没有
arr0 := CopyArray(arr)
// 计时
start := time.Now()
sort(arr)
end := time.Now()
if IsSorted(arr) && IsOrig(arr0, arr) {
fmt.Println(sortName, "排序结束", end.Sub(start))
} else {
fmt.Println("排序结果出错")
fmt.Println("是否有序 ", IsSorted(arr))
fmt.Println("是否是原来的数组 ", IsOrig(arr0, arr))
}
}
Go
1
https://gitee.com/liuluopeng/go_DSA.git
git@gitee.com:liuluopeng/go_DSA.git
liuluopeng
go_DSA
go_DSA
cde68c2b9e63

搜索帮助

53164aa7 5694891 3bd8fe86 5694891