您的位置:首页 > 编程语言 > Java开发

生成前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
相关文章推荐