洗牌算法

原创 2015年11月20日 17:04:36

适用情况 : 得到一个乱序的数组

public class ShuffleSortTest {  

    
    public static void main(String[] args) {  
        int[] data = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};  
        print(data);  
        shuffleSort(data);  
        System.out.println("排序后的数组:");  
        print(data);  
    }  
 
    public static void swap(int[] data, int i, int j) {  
        if (i == j) {  
            return;  
        }  
        data[i] = data[i] + data[j];  
        data[j] = data[i] - data[j];  
        data[i] = data[i] - data[j];  
    }  
 
    public static void shuffleSort(int[] data) {  
        for (int i = 0; i < data.length - 1; i++) {  
            int j = (int) (data.length * Math.random());  
            swap(data, i, j);  
        }  
    }  
 
    public static void print(int[] data) {  
        for (int i = 0; i < data.length; i++) {  
            System.out.print(data[i] + "\t");  
        }  
        System.out.println();  
    }  



结果:

0    1    2    3    4    5    6    7    8    9    
排序后的数组:
2    8    1    4    6    0    5    9    7    3   


VBS洗牌算法

  • 2013年08月16日 14:57
  • 584B
  • 下载

网易有道编程题:洗牌算法(C++)

题目:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆)...
  • lxubin
  • lxubin
  • 2016年08月26日 21:11
  • 1652

洗牌算法(感觉有点用)

  • 2011年11月01日 21:14
  • 896B
  • 下载

完美洗牌算法(2013年UC校招笔试、2016阿里实习生笔试)

完美洗牌算法 2013年UC校招笔试、2016阿里实习生笔试

[经典面试题]完美洗牌算法

题目有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。来源...

不使用随机数的洗牌算法实现(C++实现)

偶然看到有人讨论不使用随机数怎么洗牌,感觉挺有意思的。其实本质就是要达到随机的效果,这个是开放性的问题,其实思路是很多的,主要看实现的难度或者是否可以实现随机洗牌。 我的思路有如下: ...

Delphi洗牌算法 - 将一个数组随机乱序

用于考试时乱序,相同的试题,但每位考生看到的题序不同。 unit Unit1; interface uses Windows, Messages, SysUtils, Var...
  • holen
  • holen
  • 2013年07月01日 21:08
  • 1097

一个简单的扑克牌洗牌算法|无重复

1.最初的想法:      第一个数:随机产生一个1-52 之间的数;  第二个数:随机产生一个,和第一个比较,如果相同,就再产生一个随机的,直到不同为止;  第三个数:随机产生一个,和第一、第...

A Simple In-Place Algorithm for In-Shuffle 一种简单的原地洗牌算法

只是把这篇文章前3部分翻译了,由于是学通信的,很多计算机术语可能翻译的不对,对文章内容理解偏差也可能会导致翻译错误,若发现,请指正,方便我更正!  1引文 通过把一副牌均分为两半,让后一半交错插...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:洗牌算法
举报原因:
原因补充:

(最多只允许输入30个字)