题目:若干个不重复数,打乱顺序输出

本文介绍了一种使用JavaScript实现的算法,能够将一组不重复的数字打乱顺序输出。此外,还提供了一种更高效的实现方式,通过随机位置插入元素来达到相同的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  上次在跟一个朋友吃饭的时候,他说起他那个时候的一个面试题,闲来无事,顺手做了下。
  题目是:若干个不重复数,打乱顺序输出,用javascript实现
  实现如下:
 
       window.onload  =   function  () {
            
//  1到100,打乱顺序输出
            outputOne();
            document.write(
" <br /><br /> " );

            
//  自定义的列表,打乱顺序输出
            outputTwo();
        };

        
function  outputOne() {
            
var  count  =   100 ;
            
var  size  =   10 ;

            
for  ( var  i  =   1 ; i  <=  count; i ++ ) {
                document.write(i 
+   "    " );
                
if  (i  >   1   &  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };

            document.write(
" <br /><br /> " );

            
var  list  =  [];
            
var  number;
            
var  listCount;

            
while  (list.length  <  count) {
                listCount 
=   0 ;
                number 
=  Math.floor(Math.random()  *  count)  +   1 ;
                
for  ( var  i  =   0 ; i  <  list.length; i ++ ) {
                    
if  (number  !=  list[i]) {
                        listCount
++ ;
                    };
                };

                
if  (listCount  ==  list.length) {
                    list.push(number);
                };
            };

            
for  ( var  i  =   1 ; i  <=  list.length; i ++ ) {
                document.write(list[i 
-   1 +   "   " );
                
if  (i  >   1   &&  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };
        };

        
function  outputTwo() {
            
var  size  =   10 ;
            
var  list  =  [ 1 2 3 4 5 10 20 30 50 100 200 300 500 1000 6 7 8 9 ];
            
var  newList  =  [];

            
for  ( var  i  =   1 ; i  <=  list.length; i ++ ) {
                document.write(list[i 
-   1 +   "    " );
                
if  (i  >   1   &  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };

            document.write(
" <br /><br /> " );

            
var  index;
            
var  listCount;

            
while  (newList.length  <  list.length) {
                listCount 
=   0 ;
                index 
=  Math.floor(Math.random()  *  list.length);
                
for  ( var  i  =   0 ; i  <  newList.length; i ++ ) {
                    
if  (list[index]  !=  newList[i]) {
                        listCount
++ ;
                    };
                };

                
if  (listCount  ==  newList.length) {
                    newList.push(list[index]);
                };
            };

            
for  ( var  i  =   1 ; i  <=  newList.length; i ++ ) {
                document.write(newList[i 
-   1 +   "   " );
                
if  (i  >   1   &&  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };
        };

 

感谢 明天.Net(小彭) 同学提供一种更高明的思路:

利用往新的数组中随意位置依次插入新的元素的方式得到一个随机排列,即我们需要的结果

 

        function  outputThree() {
            
var  size  =   10 ;
            
var  list  =  [ 1 2 3 4 5 10 20 30 50 100 200 300 500 1000 6 7 8 9 ];
            
var  outlist  =  [];

            
for  ( var  i  =   1 ; i  <=  list.length; i ++ ) {
                document.write(list[i 
-   1 +   "    " );
                
if  (i  >   1   &  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };

            document.write(
" <br /><br /> " );

            
for  ( var  i  =   0 ; i  <  list.length; i ++ ) {
                
if  (i  ==   0 ) {
                    outlist.push(list[i]); 
                } 
else  {
                    
var  index  =  Math.floor(Math.random()  *  (outlist.length  +   1 ));
                    outlist.splice(index, 
0 , list[i]);
                };
            };

            
for  ( var  i  =   1 ; i  <=  outlist.length; i ++ ) {
                document.write(outlist[i 
-   1 +   "   " );
                
if  (i  >   1   &&  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };
        };

 

转载于:https://www.cnblogs.com/myself/archive/2011/02/25/1964837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值