void permute(int a[], int n){for (int i = n; i > 0; --i){swap(a[i-1], a[rand()%i]);}// a[i-1] 与 a[0, i)(包括 a[i-1])  中某一随机元素交换
}

这也是 JDK 源码 Collections.shuffle 的实现原理:

public static void shuffle(List<?> list, Random rnd) {int size = list.size();if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {for (int i=size; i>1; i--)swap(list, i-1, rnd.nextInt(i));} else {Object arr[] = list.toArray();// Shuffle arrayfor (int i=size; i>1; i--)swap(arr, i-1, rnd.nextInt(i));ListIterator it = list.listIterator();for (int i=0; i<arr.length; i++) {it.next();it.set(arr[i]);}}}

随机化算法 —— 数组置乱器的实现相关推荐

  1. 0046算法笔记——【随机化算法】舍伍德随机化思想解决跳跃表问题

    问题描述 如果用有序链表来表示一个含有n个元素的有序集S,则在最坏情况下,搜索S中一个元素需要O(n)计算时间.提高有序链表效率的一个技巧是在有序链表的部分结点处增设附加指针以提高其搜索性能.在增设附 ...

  2. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  3. 算法小课堂(十)随机化算法

    目录 一.概述 1.1概念 1.2分类 二.数值随机化算法 2.1随机数 2.2用随机投点法计算Π值 2.3随机投点法计算定积分 三.舍伍德(Sherwood)型随机化算法 3.1随机洗牌算法 3.2 ...

  4. 数值随机化算法和舍伍德随机算法

    开篇 我们之前讨论过的动态规划算法.回溯法.分支限界算法.二分法等等都是每个计算步骤确定的算法,而这次要讨论的是随机化算法,允许算法在执行过程中随机地选择下一个计算步骤. 随机化算法不一定是最优的,甚 ...

  5. jvm相关,垃圾收集算法,垃圾收集器,jvm调优--学习笔记

    对内存合理分配,优化jvm 参数,就是为了尽可能减少新生代(Minor GC),或者是整个老年代(Major GC) ,或者是整个 Java 堆 (Full GC) ,尽量减少 GC 带来的系统停顿, ...

  6. 快速排序的随机化算法C语言版

    快速排序的随机化算法C语言版 #include<stdio.h> #include<stdlib.h> void quicksort(int *a, int left, int ...

  7. 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

    1.蒙特卡罗算法 基本概述        蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...

  8. 【算法】快速选择算法 ( 数组中找第 K 大元素 )

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

  9. php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)

    //php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...

最新文章

  1. python读什么英文-Python常用英文单词有哪些?
  2. Java Review - 并发编程_ThreadPoolExecutor原理源码剖析
  3. CentOS 7环境安装Docker
  4. java jpa @joincolumn 字段不为空_拥抱开源从表设计到 JPA 实现
  5. Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】...
  6. java 内存分布_一图看懂JVM内存分布,永久记住!
  7. git 添加用户名和邮箱_Git实用教程(二) | Git简介及安装详解
  8. python遍历字典与for循环运用方法
  9. UVA11292 HDU1902 POJ3646 The Dragon of Loowater【贪心】
  10. docker 系列 - 基础镜像环境和Docker常用命令整理
  11. UVALive3713-Astronauts 2-SAT
  12. 【技术贴】关于IE主页被篡改、假IE的根治方法。。。
  13. Git的安装教程(完成clone一个项目到本地)
  14. 京东的笔记本电脑和实体店有区别吗
  15. VS Code 配置第三方库 类似pygame
  16. 移动通信与无线实验五:AP认证及WLAN配置流程
  17. 常用HTTP抓包工具Fiddler使用的12个小技巧,值得收藏!
  18. 求1到100之间的质数(素数)?
  19. struct page
  20. Linux快捷键汇总(持续更新)

热门文章

  1. git忽略文件或者文件夹
  2. Kafka的介绍之一
  3. 离散数学 第二类斯特林数 小白学习笔记
  4. findwindowex子窗口类型有哪几种_游戏场景该怎么画?来参考一下不同的类型吧
  5. 审计计算机考试报名,审计业务考试计算机(5页)-原创力文档
  6. 机器学习代码实战——决策树(预测泰坦尼号船员生存情况)
  7. OpenCV精进之路(七):图像变换——重映射与仿射变换
  8. opencv将图像转换成二维数组再将数组数据传给新图像
  9. maven 本地仓库添加jar包
  10. springMVC中ajax的实现