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


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

    package src
    
    import (
    	"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()
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    
    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]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    2022国开中国现代文学专题阶段作业2-4答案
    【c++ primer 笔记】第13章 拷贝控制
    排序——归并排序
    Docker系列第05部分:实战部署应用全流程
    Java-API简析_java.util.Objects类(基于 Latest JDK)(浅析源码)
    竞赛选题 基于机器视觉的火车票识别系统
    基于MODIS数据的2000-2021年中国植被生物量数据集
    BOM Broser Object Model(浏览器对象模型)提供了独立了独立于内容与浏览器窗口进行交互的对象。
    Web前端—网页制作(以“学成在线”为例)
    spring的redis注解@Cacheable @Cacheput @CacheEvict的condition、unless
  • 原文地址:https://blog.csdn.net/qq_37106501/article/details/134040677