zoukankan      html  css  js  c++  java
  • 如何随机排序数组?使用多种方式!递归,迭代,洗牌,sort方法!

    方式1: 使用sort 方法 ----

     1        // 方法1 使用sort 方法  
     2         var  arr = [1,2,3,4,5,6,7,8];
     3         function foo(arr) {
     4             var cloneArr = arr.concat();
     5             cloneArr.sort(function (n1,n2) {
     6                 return Math.random() - 0.5 ;
     7             });
     8             return cloneArr;
     9         }
    10         for (var i= 0 ; i < arr.length ; i++ ){
    11             console.log(foo(arr));
    12         }

    方式2:使用递归 

        <script>
            var arr = [1,2,3,4,5,6,7,8];
    
            function foo(arr) {
                //使用concat 复制一个数组中 
                var  cloneArr = arr.concat();
                var result = [];
                    (function name(params) {
                        if (!cloneArr.length)  return ;
                        var index = Math.floor(Math.random() * cloneArr.length);
                        result = result.concat(cloneArr.splice(index, 1));
                        arguments.callee();
                    })()
                return result;
            }
            for (let i = 0; i < arr.length; i++) {
                console.log(foo(arr))            
            }
        </script>
    </html>

    方式3:使用迭代

           var arr = [1, 2, 3, 4, 5, 6, 7, 8];
                function foo(arr) {
                    //使用concat 复制一个数组中 
                    var cloneArr = arr.concat();
                    var result = [];
    
                    var len = cloneArr.length;
    
                    for(var i= 0 ;i< len ;i++){
                        var index = Math.floor(Math.random()* cloneArr.length);
                        result = result.concat(cloneArr.splice(index,1));
                    }
                    return result ;
                }
                for (let i = 0; i < arr.length; i++) {
                    console.log(foo(arr))
                }

    方法4: 洗牌方式

                       var arr = [1, 2, 3, 4, 5, 6, 7, 8];
                        function foo(arr) {
                            //使用concat 复制一个数组中 
                            var cloneArr = arr.concat();
    
                            for (var i = 0; i < cloneArr.length; i++) {
                                var index = Math.floor(Math.random() * cloneArr.length);
                                var temp = cloneArr[index];
                                cloneArr[index] = cloneArr[i];
                                cloneArr[i] = temp;
                            }
                            return cloneArr;
                        }
                        for (let i = 0; i < arr.length; i++) {
                            console.log(foo(arr))
                        }

    综合四种方法 -----认为用第四钟洗牌方式更佳!

    一份帮助文档,无论多么仔细,都不会帮助主人多敲一行代码!
  • 相关阅读:
    P4141 消失之物(退背包模板)
    P5829 【模板】失配树
    P4827 [国家集训队] Crash 的文明世界
    P4074 [WC2013]糖果公园
    P3242 [HNOI2015]接水果
    P2371 [国家集训队]墨墨的等式
    P4819 [中山市选]杀人游戏
    P5331 [SNOI2019]通信
    BZOJ1082 [SCOI2005]栅栏
    poj1475 Pushing Boxes[双重BFS(毒瘤搜索题)]
  • 原文地址:https://www.cnblogs.com/yaogengzhu/p/10382244.html
Copyright © 2011-2022 走看看