當前位置:首頁 » 操作系統 » js簡單演算法

js簡單演算法

發布時間: 2025-06-19 09:42:38

1. 求個JS演算法

把三個坐標點放到一個數組里:

vard=[[0,0],[10,0],[5,5]];

然後用個變數i表示A點在數組d中的初始序號:

vari=0;

這樣ABC三個點的坐標就是:

vara,b,c
a=d[i];
b=d[(i+1)%3];
c=d[(i+2)%3];

向右旋轉時:

a=d[++i%3];
b=d[(i+1)%3];
c=d[(i+2)%3];

向左旋轉時:

a=d[--i<0?2:i];
b=d[(i+1)%3];
c=d[(i+2)%3];

2. JS 中常見的幾種去重方法

ES6 提供了新的數據結構 Set 。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
Set 本身是一個構造函數,用來生成 Set 數據結構。
利用的演算法類似 '===',與 '===' 的區別是 『===』 認為 NaN != NaN , set 的演算法認為它們是相等的。
但 Set 不支持對象方法,認為對象都是不相等的。

原理: splice 會改變原數組

filter() 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素
indexOf ( searchvalue, fromindex )
searchvalue :必填值,規定需檢索的字元串值
fromindex :選填值,規定在字元串中開始檢索的位置。它的合法取值是 0 到 stringObject.length - 1。
如省略該參數,則將從字元串的首字元開始檢索。

原理:相鄰元素對比法,若相等則去掉一個
註:array.sort( function ) 參數必須是函數,可選,默認升

3. web前端javascript能實現什麼演算法或者計算

在Web開發中,JavaScript很重要,演算法也很重要。下面整理了一下一些常見的演算法在JavaScript下的實現,包括二分法、求字元串長度、數組去重、插入排序、選擇排序、希爾排序、快速排序、冒泡法等等。僅僅是為了練手,不保證高效與美觀,或許還有Bug,有時間再完善吧。

1.二分法:

function binary(items,value){

var startIndex=0,

stopIndex=items.length-1,

midlleIndex=(startIndex+stopIndex)>>>1;

while(items[middleIndex]!=value && startIndex

if(items[middleIndex]>value){

stopIndex=middleIndex-1;

}else{

startIndex=middleIndex+1;

}

middleIndex=(startIndex+stopIndex)>>>1;

}

return items[middleIndex]!=value ? false:true;

}

2.十六進制顏色值的隨機生成:

function randomColor(){

var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],

strHex="#",

index;

for(var i=0;i < 6; i++){

index=Math.round(Math.random()*15);

strHex+=arrHex[index];

}

return strHex;

}

一個求字元串長度的方法:

function GetBytes(str){

var len=str.length,

bytes=len;

for(var i=0;i < len;i++){

if(str.CharCodeAt>255){

bytes++;

}

}

return bytes;

}

3.js實現數組去重:

Array.protype.delRepeat=function(){

var newArray=new Array();

var len=this.length;

for(var i=0;i < len;i++){

for(var j=i+1;j < len;j++)

{

if(this[i]==this[j])

{

++i;

}

}

newArray.push(this[i]);

}

return newArray;

}

4.插入排序。所謂的插入排序,就是將序列中的第一個元素看成一個有序的子序列,然後不段向後比較交換比較交換。

function insertSort(arr){

var key;

for(var j = 1; j < arr.length ; j++){

//排好序的

var i = j - 1;

key = arr[j];

while(i >= 0 && arr[i] > key){

arr[i + 1] = arr[i];

i --;

}

arr[i + 1] = key;

}

return arr;

}

5.選擇排序。其實基本的思想就是從待排序的數組中選擇最小或者最大的,放在起始位置,然後從剩下的數組中選擇最小或者最大的排在這公司數的後面。

function selectionSort(data)

{

var i, j, min, temp , count=data.length;

for(i = 0; i < count - 1; i++) {

/* find the minimum */

min = i;

for (j = i+1; j < count; j++)

{

if (data[j] < data[min])

{ min = j;}

}

/* swap data[i] and data[min] */

temp = data[i];

data[i] = data[min];

data[min] = temp;

}

return data;

}

6.希爾排序,也稱遞減增量排序演算法。其實說到底也是插入排序的變種。

function shellSort(array){

var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; //
reverse()在維基上看到這個最優的步長較小數組

var i = 0;

var stepArrLength = stepArr.length;

var len = array.length;

var len2 = parseInt(len/2);

for(;i < stepArrLength; i++){

if(stepArr[i] > len2){

continue;

}

stepSort(stepArr[i]);

}

// 排序一個步長

function stepSort(step){

//console.log(step) 使用的步長統計

var i = 0, j = 0, f, tem, key;

var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;

for(;i < step; i++){// 依次循環列

for(j=1;/*j < stepLen && */step * j + i < len;
j++){//依次循環每列的每行

tem = f = step * j + i;

key = array[f];

while((tem-=step) >= 0){// 依次向上查找

if(array[tem] > key){

array[tem+step] = array[tem];

}else{

break;

}

}

array[tem + step ] = key;

}

}

}

return array;

}

7.快速排序。其實說到底快速排序演算法就系對冒泡排序的一種改進,採用的就是演算法理論中的分治遞歸的思想,說得明白點,它的做法就是:通過一趟排序將待排序的紀錄分割成兩部分,其中一部分的紀錄值比另外一部分的紀錄值要小,就可以繼續分別對這兩部分紀錄進行排序;不段的遞歸實施上面兩個操作,從而實現紀錄值的排序。

function quickSort(arr,l,r){

if(l < r){

var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;

while(true){

while(arr[++i] < mid);

while(arr[--j]>mid);

if(i>=j)break;

var temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

quickSort(arr,l,i-1);

quickSort(arr,j+1,r);

}

return arr;

}

8.冒泡法:

function bullSort(array){

var temp;

for(var i=0;i < array.length;i++)

{

for(var j=array.length-1;j > i;j--){

if(array[j] < array[j-1])

{

temp = array[j];

array[j]=array[j-1];

array[j-1]=temp;

}

}

}

return array;

}

4. 如何使用JS實現微信紅包演算法


這次給大家帶來如何使用JS實現微信紅包演算法,使用JS實現微信紅包演算法的注意事項有哪些,下面就是實戰案例,一起來看一下。
我們假設有一個100元的紅包,要發給10個人。為了保證公平,演算法需要保證以下的原則:
每個人最少能搶到0.01元
每個人的機會平等
所有人的金額之和等於100元
1.簡單的隨機函數實現
很多朋友的一般思路是:
第一步:從0-100中隨機一個數,得到第一個紅包金額。
第二步:從0-剩餘金額中隨機一個數,得到第二個紅包金額。
第三步:...
最後一步把剩餘的錢都給最後一個人。
以此類推,得到全部的10 個紅包。但是不知道大家注意到沒有,這樣存在明顯的 不公平 。先搶的人比較有優勢,第一個人的隨機范圍是0-100,有可能得到較大的金額。而最後一個人的隨機范圍就會很小,如果第一個人搶到了90塊錢,那麼最後一個人就不可能有的到超過10塊錢的機會。我們用代碼模擬一下這個過程:

測試結果如下:

細心的朋友會注意到,余額的值不正確,這是JavaScript浮點數運算的已知問題。當然解決的方式有很多,如果你有好的辦法歡迎你給我留言。
相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!
推薦閱讀:
如何使用vue中filter

怎樣使用vue判斷dom的class

5. js 冒泡排序演算法詳解

冒泡排序是一種基礎的排序演算法,其原理相對簡單。在對數組進行排序時,我們從頭開始,比較相鄰的兩個元素。如果前一個元素大於後一個元素,就將它們交換位置。這樣,經過一輪比較和交換後,數組中最大的元素就會被「泡」到數組的最後。我們重復這個過程n-1次,其中n是數組的長度,這樣所有元素都能按照從小到大的順序排列。

具體實現上,我們首先找到數組中最大的元素,並將它放在數組的最後。然後重復這個過程n-1次,每次都能確定一個最大值並將其移到正確的位置。這樣,數組就能完成排序。原始的冒泡排序代碼執行速度為0.153毫秒。

優化後的代碼會在下一次遍歷時跳過已確定的最大值,避免不必要的交換。這樣執行速度提升到了0.105毫秒,更加高效。通過這樣的改進,我們得到了完整的冒泡排序演算法。

總結而言,冒泡排序涉及外層循環控制整個排序過程,內層循環用於元素的比較和交換。找到最大值並置於數組末端,直至完成排序。

希望以上內容能幫助到您。如果您覺得有幫助,不妨收藏關注。謝謝!

熱點內容
python讀取xlsx文件 發布:2025-06-19 12:26:34 瀏覽:639
跨腳本調用 發布:2025-06-19 12:26:08 瀏覽:875
python金融案例 發布:2025-06-19 12:16:13 瀏覽:394
硬鏈接linux 發布:2025-06-19 12:03:35 瀏覽:4
無法與網路連接到伺服器失敗怎麼辦 發布:2025-06-19 12:03:35 瀏覽:340
手機詳細信息里的編譯時間 發布:2025-06-19 11:58:45 瀏覽:491
openssl編譯動態 發布:2025-06-19 11:50:55 瀏覽:643
抹零演算法 發布:2025-06-19 11:27:17 瀏覽:400
浙江圖書館資料庫 發布:2025-06-19 11:17:13 瀏覽:453
ip地址怎麼看伺服器 發布:2025-06-19 11:16:10 瀏覽:448