導航:首頁 > 編程語言 > js數組隨機化

js數組隨機化

發布時間:2023-07-10 09:53:05

js實現隨機化快速排序的實例代碼

演算法的平均時間復雜度為O(nlogn)。但是當輸入是已經排序的數組或幾乎排好序的輸入,時間復雜度卻為O(n^2)。為解決這一問題並保證平均時間復雜度為O(nlogn)的方法是引入預處理步驟,它惟一的目的是改變元素的順序使之隨機排序。這種預處理步驟可在O(n)時間內運行。能夠起到同樣作用的另一種簡單方法是在演算法中引入一個隨機元素,這可以通過隨機地選擇拆分元素的主元來實現。隨機選擇主元的結果放寬了關於輸入元素的所有排列的可能性相同的步驟。引入這一步來修正原先的快速排序,可得到下面所示的隨機化快速排序。新演算法只是在區間[low…high]中一致隨機地選擇一個索引v,並將A[v]和A[low]交換,然後按照原來的快速排序演算法繼續。這里,parseInt(Math.random()*(high-low+1)
+
low)返回一個在low和high之間的數。
復制代碼
代碼如下:
/****************************************
演算法:split
輸入:數組A[low...high]
輸出:
1.若有必要,輸出按上述描述的重新排列的數組A;
2.劃分元素A[low]的新位置w;
****************************************/
function
split(array,
low,
high)
{
var
i
=
low;
var
x
=
array[low];
for(var
j
=
low
+
1;
j
<=
high;
j++)
{
if(array[j]
<=
x)
{
i
++;
if(i
!=
j)
{
var
temp
=
array[i];
array[i]
=
array[j];
array[j]
=
temp;
}
}
}
temp
=
array[low];
array[low]
=
array[i];
array[i]
=
temp;
return
i;
}
/****************************************
演算法:rquicksort
輸入:A[0...n-1]
輸出:按非降序排列數組A[0...n-1]
rquicksort(A,
0,
n-1);
****************************************/
function
rquicksort(array,
low,
high)
{
if(low
<
high)
{
/******隨機化拆分元素的主元*******/
var
v
=
parseInt(Math.random()*(high-low+1)
+
low);
var
tmp
=
array[low];
array[low]
=
array[v];
array[v]
=
tmp;
/******隨機化拆分元素的主元*******/
var
w
=
split(array,
low,
high);
rquicksort(array,
low,
w
-1);
rquicksort(array,
w
+1,
high);
return
array;
}
}
var
array
=
[33,
22,
11,
88,
23,
32];
array
=
rquicksort(array,
0,
array.length-1);
console.log(array);

❷ 用js如何實現隨機返回數組的一個元素

vara=[1,2,3,3,4,5,6,7,8,9];
functionsendNum(arr)
{
returnarr[Math.floor(Math.random()*arr.length)];
}
sendNum(a);
這樣就可以實現每次返回是一個隨機數組中的一個數。版主要權用的就是random的方法。random方法,是返回(0,1]的數,但取不到1,所以用Math.floor向下取整。

❸ 怎麼用js從一個數組中隨機取出5個元素

用隨機數產生函數啊,rand(),可以先用時間函數產生一個種子,
#include<stdlib.h>
#include<time.h>
srand(time(null));
i=rand();
然後
i
就可以作為數組的內下標容了,根據數組的實際長度,可以利用rand()%x
(其中x是數組的長度)來限定
i
的取值范圍

❹ JS生成不重復的隨機數組的簡單實例

JS生成不重復的隨機數組的簡單實例
//獲取數組中的隨機數
//HF.Math.RandomNumbers是前綴,可以自己定義,主要看邏輯代碼
HF.Math.RandomNumbers
=
function
(startNum,
endNum,
count,
repeat)
{
var
ret
=
[];
if
(repeat)
{
for
(var
i
=
0;
i
<
count;
i++)
{
ret[i]
=
HF.Math.Random(startNum,
endNum);
}
return
ret;
}
var
tmp
=
[];
var
i
=
0;
for
(var
s
=
startNum;
s
<=
endNum;
s++)
{
tmp[i++]
=
s;
}
var
l
=
tmp.length;
for
(i
=
0;
i
<
count;
i++)
{
ret[i]
=
HF.Array.Remove(tmp,
HF.Math.Random(0,
--l));
}
return
ret;
}
以上這篇JS生成不重復的隨機數組的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

❺ JS 如何將 數組的 內容 重新 隨機排列 比如 array 裡面是 1, 2,3 , 4 然後 隨便重新放入數組3214 4321

<script>

vararr=[1,2,3,4];
arr.sort(function(){return0.5-Math.random()});
alert(arr);
</script>

❻ 用JS實現隨機生成10個1-1100之間的不重復的整數存放在數組中,並由用戶輸入一個數判斷是否在該

這是我以前寫的,封裝成獨立函數,那個ran()是主要的,不過可能寫得會有點亂,但是用是ok的,
"use strict";
var random, arr = [], random_oo, oo = 0;
var r, a = 1, b = 1, c, n, num, k, result, m;

/**
* 生成min到max之間的隨機整數並返回。
* @param min
* @param max
* @returns {number}
*/
function ran_sc(min, max) {
random = Math.round(Math.random() * (max - min)) + min;
return random;
}
/**
* 生成唯一隨機數需要,檢測當前隨機數與數組內所有數字重復情況。
* @param x 隨機數
* @returns {number} 重復情況
* 唯一(數組內所有數字沒有和x重復,返回0;
* 有重復,返回1。
*/
function csqian(x) {
oo = 0;
for (var l = 0; l < arr.length; l++) {
if (x === arr[l]) oo = 1;
}
return oo;
}

/**
* 主調用函數。
* @param min 最小值
* @param max 最大值
* @param zushu 組數,要生成隨機數的個數。
* @param chong_fu 是否重復,隨便生成為true,生成唯一為false、
* @returns {Array} 隨機數數組
*/
function ran(min, max, zushu, chong_fu) {
arr = [];
if (chong_fu === true) {//隨便
random = arrran(min, max, zushu);
return random;
} else if (chong_fu === false) {//唯一
random = arrran_oo(min, max, zushu);
return random;
}
}

/**
* 隨便生成
* @param min
* @param max
* @param zushu
* @returns {Array}
*/
function arrran(min, max, zushu) {
for (var i = 0; i <= (zushu - 1); i++) {
arr[i] = ran_sc(min, max);
}
return arr;
}

/**
* 生成唯一隨機數函數的判斷選擇。。
* @param min
* @param max
* @param zushu
* @returns {Array}
*/
function arrran_oo(min, max, zushu) {
if (zushu > (max - min + 1)) {
console.log(min);
console.log(max);
console.log(zushu);
alert("組數應不超過能生成的所有不一樣的隨機數的數目\n(即組數不超過(最大值-最小值+1))");
} else {
random = c_s(min, max, zushu);
return random;
}
}

/**
* 生成唯一隨機數
* @param min
* @param max
* @param zushu 組數
* @returns {Array}
*/
function c_s(min, max, zushu) {
for (m = 0; m <= Infinity; m++) {
if (m === zushu) break;
random_oo = ran_sc(min, max);
if (csqian(random_oo) === 0) {
arr[m] = random_oo;
} else if (csqian(random_oo) === 1) {
random_oo = ran_sc(min, max);
m -= 1;
}
}
return arr;
}

var r_ = ran(1, 1100, 10, false);
let INum = 0;//這里是用戶輸入的數
let EP = -1;
for (let i = 0; i < r_.length; ++i) {
if (r_[i] === INum) EP = i;
}
console.log("輸入的數: " + INum);
console.log("生成隨機數結果: " + r_.toString());
console.log("結果: " + EP);

❼ js隨機數組問題

varallComponents=[],goodComponents=[],badComponents=[];
for(vari=0;i<3000;i++){
if(Math.random()<0.5){
allComponents.push("good");
goodComponents.push(i);
}else{
allComponents.push("bad");
badComponents.push(i);
}
}

其中allComponents中儲存的是零件的好壞標識,比如內 ["good", "bad", "good"...]

goodComponents儲存的是好零件在容allComponents中的序號,比如 [0, 2...]

badComponents儲存的則是壞零件在allComponents中的序號,比如 [1, ...]

另外,你題目中有一處是自我矛盾的,前面說「只知道好的零件比壞的零件多」,後面又說「生成好的零件和壞的零件概率一致」,這個怎麼解釋?

❽ js如何生成指定范圍內的隨機數

function getArrayItems(arr, num) { //新建一個數組,將傳入的數組復制過來,用於運算,而不要直接操作傳入的數組; var temp_array = new Array(); for (var index in arr) { temp_array.push(arr[index]); } //剔除一些數字//取出的數值項,保存在此數組 var return_array = new Array(); for (var i = 0; i//判斷如果數組還有可以取出的元素,以防下標越界 if (temp_array.length>0) { //在數組中產生一個隨機索引 var arrIndex = Math.floor(Math.random()*temp_array.length); //將此隨機索引的對應的數組元素值復制出來 return_array[i] = temp_array[arrIndex]; //然後刪掉此索引的數組元素,這時候temp_array變為新的數組 temp_array.splice(arrIndex, 1); } else { //數組中數據項取完後,退出循環,比如數組本來只有10項,但要求取出20項. break; } } return return_array; }var my_array = new Array(); for (i = min; i < max; i++) //max,min指定范圍{ my_array[i] = i; } my_array = getArrayItems(my_array,1000); //得到數組 function rand(u,d){ ++d; return parseInt(Math.random()*(u-d)+d); }

閱讀全文

與js數組隨機化相關的資料

熱點內容
計算機程序用什麼編程語言 瀏覽:324
linux入門常用命令 瀏覽:497
江寧區哪裡有數控編程培訓 瀏覽:778
java寫一個shape形狀類 瀏覽:744
win7如何設置word背景顏色 瀏覽:484
如何創造電腦編程語言 瀏覽:56
昂達平板電腦圖形密碼忘記怎麼辦 瀏覽:92
組織文件內容是什麼 瀏覽:183
0基礎如何學習智能編程 瀏覽:366
java程序員全攻略下載 瀏覽:715
網路逆向教程 瀏覽:135
iso文件如何重裝系統 瀏覽:750
ghost鏡像文件路徑如何恢復 瀏覽:832
搭建網站需要多少錢啊 瀏覽:599
編程貓怎麼設置背景亮度 瀏覽:177
qq文件破損 瀏覽:414
javapoi配置 瀏覽:608
編程怎麼寫數據圖案同步 瀏覽:308
海康監控錄像回放丟數據怎麼回事 瀏覽:155
in後綴是什麼文件 瀏覽:142

友情鏈接