生成前N个整数的一个随机置换java实现
2017-09-15 16:48
453 查看
这个问题数据结构与算法分析java语言描述版,第二章的2.8课后习题的。下面我的三种不同的实现:
随机数生成函数
public static int randInt(int i, int j) { int temp = (int) (Math.random() * j + i); return temp; }
1.时间复杂度为O(n^2)
public static int[] randArray(int[] arr) { for (int i = 0; i < arr.length; i++) { arr[i] = randInt(0, arr.length); for (int k = 0; k < i; k++) { if (arr[k] == arr[i]) { arr[i] = randInt(0, arr.length); k = -1; } } } return arr; }
2.时间复杂度为O(n)
/** * 用一个中间数组,来表示随机数是否已经使用 * */ public static int[] randArray1(int[] arr) { int[] temp = new int[arr.length]; for (int i = 0; i < arr.length; i++) { arr[i] = randInt(0, arr.length); while (temp[arr[i]] == 1) {//重复赋值, arr[i] = randInt(0, arr.length); } temp[arr[i]] = 1; } return arr; }
3.时间复杂度O(n)
//思想是数组已经赋值,通过随机函数交换里面数的位置 public static int[] randArray2(int[] arr) { for(int i = 0 ; i < arr.length; i++){ arr[i] = i ; } for(int i = 1 ; i < arr.length ; i++){ swap(arr,i,randInt(0, i)); } return arr; }
相关文章推荐
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- java 实现生成随机大整数
- 随机生成一个迷宫并探索一条路径的JAVA实现
- java实现一个在窗口显示一个随机生成的号码
- JAVA问题总结之23--生成一个长度为100的随机整数list
- 随机正整数生成类的JAVA实现
- 编程珠玑_第十三章_生成一个随机整数的有序集合
- 基础算法测试——生成一个1-10之间的随机整数组合
- 基础算法测试——生成一个1-10之间的随机整数组合
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法
- java实现一个整数和一个小数的四则运算和求最大值,平均值。
- 【Java笔记】随机生成a到b的整数
- 如何用java随机生成一个汉字?
- 定义一个具有10 个整形元素的数组,随机生成1——100 之间的整数初始化数组元
- Excel Report 一个小巧实用基于java实现的Excel报表生成工具
- 基础算法测试——生成一个1-10之间的随机整数组合
- java 一个int数组 长度为100 随机生成100个数 即1-100 将其插入进数组 插入的数字不能重复
- [转]随机整数的生成(java)
- 1、请编写函数foo(int x, int y, int n) 计算:随机生成x个大小为[1,y]的正整数,它们的和为n的概率是多少?语言仅限于PHP、C/C++、Java中的一种。
- 基础算法测试——生成一个1-10之间的随机整数组合