当前位置: 首页 > news >正文

Golang洗牌算法(Golang乱序算法)

Golang 洗牌算法(乱序算法);需求背景:从一个文件下下读取所有文件,获取他们的名字, 将名字乱序排序,按着乱序后的序列,通过名字去找到文件,再上传,以达到上传文件的序列据原始序列相比是乱序的。

package srcimport ("fmt""io/ioutil""math/rand""os""time"
)// Shuffle ...
// @Description:洗牌算法(乱序算法);需求背景:从一个文件下下读取所有文件,获取他们的名字,
// 将名字乱序排序,按着乱序后的序列,通过名字去找到文件,再上传,以达到上传文件的序列据原始序列相比是乱序的。
func Shuffle() {var testFunc1 = func() {dir, err := os.ReadDir("D:\\sorttest")if err != nil {fmt.Println(err)}var total = len(dir)var originOrder = make([]string, total)var shuffledOrder = make([]string, total)for i, info := range dir {originOrder[i] = info.Name()}fmt.Println("originOrder:\n", originOrder)fmt.Println("--------- start shuffle  Func1 【 Fisher-Yates Shuffle 】  ----------")rand.Seed(time.Now().UnixNano())var shuffleFunc1 = func() {for i := total; i > 0; i-- {j := rand.Intn(i)shuffledOrder[i-1] = originOrder[j]                          // 将随机下标对应的数值取出 倒插进新数组中originOrder = append(originOrder[0:j], originOrder[j+1:]...) // 删除已经取出的值,不删的话 再次随机到此下标 会 取到相同的值//fmt.Println("------processing----\n", shuffledOrder)}}shuffleFunc1()fmt.Println("originOrder:\n", originOrder)fmt.Println("shuffledOrder:\n", shuffledOrder)}var testFunc2 = func() {dir, err := ioutil.ReadDir("D:\\sorttest")if err != nil {fmt.Println(err)}var total = len(dir)var originOrder = make([]string, total)for i, info := range dir {originOrder[i] = info.Name()}fmt.Println("originOrder:\n", originOrder)fmt.Println("-------- start shuffle  Func2  【 Knuth-Durstenfeld Shuffle 】---------")rand.Seed(time.Now().UnixNano())var shuffleFunc2 = func() {for i := total - 1; i > 0; i-- {j := rand.Intn(i)originOrder[i], originOrder[j] = originOrder[j], originOrder[i]}}shuffleFunc2()fmt.Println("shuffledOrder:\n", originOrder)}testFunc1()fmt.Println("\n\n\n=================\n\n\n")testFunc2()
}

originOrder:[0.json 1.json 10.json 11.json 12.json 13.json 14.json 2.json 3.json 4.json 5.j
son 6.json 7.json 8.json 9.json]
--------- start shuffle  Func1 【 Fisher-Yates Shuffle 】  ----------
originOrder:[]
shuffledOrder:[8.json 11.json 12.json 2.json 3.json 1.json 6.json 14.json 0.json 4.json 10.js
on 5.json 13.json 9.json 7.json]=================originOrder:[0.json 1.json 10.json 11.json 12.json 13.json 14.json 2.json 3.json 4.json 5.j
son 6.json 7.json 8.json 9.json]
-------- start shuffle  Func2  【 Knuth-Durstenfeld Shuffle 】---------
shuffledOrder:[2.json 14.json 7.json 10.json 4.json 8.json 11.json 5.json 12.json 0.json 1.js
on 3.json 13.json 9.json 6.json]
http://www.lryc.cn/news/206783.html

相关文章:

  • SpringBoot 源码分析(三) 监听器分析以及属性文件加载分析
  • 记录nvm use node.js版本失败,出现报错: exit status 1: ��û���㹻��Ȩ��ִ�д˲�����
  • 【蓝牙协议】简介:蓝牙芯片、蓝牙协议架构
  • 【深度学习】
  • centos启动tomcat 并指定jdk 版本
  • day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))
  • Flume基本使用--mysql数据输出
  • MySQL——EXPLAIN用法详解
  • 69 划分字母区间
  • 文件上传漏洞(1), 文件上传绕过原理
  • 【ARM 嵌入式 C 入门及渐进 10 -- 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 比较介绍】
  • 虹科 | 解决方案 | 汽车示波器 学校教学方案
  • 广播和组播(多播)
  • 【Linux】gdb调试
  • MySQL创建函数及其使用
  • 大数据-Storm流式框架(四)---storm容错机制
  • SpringBoot项目把Mysql从5.7升级到8.0
  • RK3568-适配at24c04模块
  • Banana Pi BPI-W3 ArmSoM-W3之RK3588-MIPI-DSI屏幕调试笔记
  • Git的远程仓库
  • Linux虚拟网络设备—Veth Pair
  • Parcelable protocol requires the CREATOR object to be static on class com.test
  • Python的Matplotlib库:数据可视化的利器
  • 普通人做抖店,需要具备什么条件?一篇详解!
  • Django分页功能的使用和自定义分装
  • React-hooks有哪些用法?
  • 2024年CFA一级公示表,一级quicksheet(内附分享链接)
  • 【Kubernetes】 Kubernetes 了解云原生的原理
  • 什么是jquery
  • 竞赛选题 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别