當前位置:首頁 » 操作系統 » 演算法javascript

演算法javascript

發布時間: 2024-01-26 02:51:21

❶ 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;

}

❷ JavaScript裡面的演算法是什麼意思

就是演算法,比如快速排序演算法。
演算法都一樣,到了javascript中只能用js的語法寫。演算法比較抽象,舉個例子吧!比如你現在要吃飯,要燒水,要做飯,要看電影。怎麼辦呢?你可以先做飯然後吃飯燒水再看電影,但時間花的長,現在如果你先把水燒著,燒水是熱水器的事,你就可以做飯了,飯做完了,這時水也燒好了。現在你再一邊看電影一邊吃飯,這樣你就省了很多時間。這兩種做法就是兩種不同的演算法,當然還有其他的做法也就是演算法,但是第二種演算法肯定是一種好的演算法,因為效率比第一種高多了。在編程里,用某種對應的語言把要做的事表達出來就是一種演算法,當然我們會想著用最好的演算法,所以現在也有演算法和數據結構這門學問。

❸ 前端演算法入門:刷演算法題常用的 JS 基礎掃盲

此篇屬於前端演算法入門系列的第一篇,主要介紹常用的 數組方法 、 字元串方法 、 遍歷方法 、 高階函數 、 正則表達式 以及相關 數學知識 。

在尾部追加,類似於壓棧,原數組會變。

在尾部彈出,類似於出棧,原數組會變。數組的 push & pop 可以模擬常見數據結構之一:棧。

在頭部壓入數據,類似於入隊,原數組會變。

在頭部彈出數據,原數組會變。數組的 push (入隊) & shift (出隊) 可以模擬常見數據結構之一:隊列。

concat 會在當前數組尾部拼接傳入的數組,然後返回一個新數組,原數組不變。

在數組中尋找該值,找到則返回其下標,找不到則返回 -1 。

在數組中尋找該值,找到則返回 true ,找不到則返回 false 。

將數組轉化成字元串,並返回該字元串,不傳值則默認逗號隔開,原數組不變。

翻轉原數組,並返回已完成翻轉的數組,原數組改變。

從 start 開始截取到 end ,但是不包括 end

可參考 MDN:Sort [5]

將數組轉化成字元串,並返回該字元串,逗號隔開,原數組不變。

返回指定索引位置處的字元。類似於數組用中括弧獲取相應下標位置的數據。

類似數組的concat(),用來返回一個合並拼接兩個或兩個以上字元串。原字元串不變。

indexOf ,返回一個字元在字元串中首次出現的位置, lastIndexOf 返回一個字元在字元串中最後一次出現的位置。

提取字元串的片斷,並把提取的字元串作為新的字元串返回出來。原字元串不變。

使用指定的分隔符將一個字元串拆分為多個子字元串數組並返回,原字元串不變。

match() 方法可在字元串內檢索指定的值,或找到一個或多個正則表達式的匹配,並返回一個包含該搜索結果的數組。

注意事項 :如果 match 方法沒有找到匹配,將返回 null 。如果找到匹配,則 match 方法會把匹配到以數組形式返回,如果正則規則未設置全局修飾符 g ,則 match 方法返回的數組有兩個特性: input 和 index 。 input 屬性包含整個被搜索的字元串。 index 屬性包含了在整個被搜索字元串中匹配的子字元串的位置。

replace 接收兩個參數,參數一是需要替換掉的字元或者一個正則的匹配規則,參數二,需要替換進去的字元,仔實際的原理當中,參數二,你可以換成一個回調函數。

在目標字元串中搜索與正則規則相匹配的字元,搜索到,則返回第一個匹配項在目標字元串當中的位置,沒有搜索到則返回一個 -1 。

toLowerCase 把字母轉換成小寫, toUpperCase() 則是把字母轉換成大寫。

includes 、 startsWith 、 endsWith , es6 的新增方法, includes 用來檢測目標字元串對象是否包含某個字元,返回一個布爾值, startsWith 用來檢測當前字元是否是目標字元串的起始部分,相對的 endwith 是用來檢測是否是目標字元串的結尾部分。

返回一個新的字元串對象,新字元串等於重復了指定次數的原始字元串。接收一個參數,就是指定重復的次數。原字元串不變。

最常用的 for 循環,經常用的數組遍歷,也可以遍歷字元串。

while 、 do while 主要的功能是,當滿足 while 後邊所跟的條件時,來執行相關業務。這兩個的區別是, while 會先判斷是否滿足條件,然後再去執行花括弧裡面的任務,而 do while 則是先執行一次花括弧中的任務,再去執行 while 條件,判斷下次還是否再去執行 do 裡面的操作。也就是說 do while 至少會執行一次操作 .

拷貝一份遍歷原數組。

for…of 是 ES6 新增的方法,但是 for…of 不能去遍歷普通的對象,** for…of 的好處是可以使用 break 跳出循環。**

面試官:說一下 for...in 和 for...of 區別?

返回一個布爾值 。當我們需要判定數組中的元素是否滿足某些條件時,可以使用 every / some 。這兩個的區別是, every 會去判斷判斷數組中的每一項,而 some 則是當某一項滿足條件時返回。

rece 從左到右將數組元素做「疊加」處理,返回一個值。 receRight 從右到左。

Object.keys 方法的參數是一個對象,返回一個數組。該數組的成員都是該對象自身的(而不是繼承的)所有屬性名,且只返回可枚舉的屬性。

Object.getOwnPropertyNames 方法與 Object.keys 類似,也是接受一個對象作為參數,返回一個數組,包含了該對象自身的所有屬性名。但它能返回不可枚舉的屬性。

這里羅列一些我在刷演算法題中遇到的正則表達式,如果有時間可認真學一下 正則表達式不要背 [7]

持續更新,敬請期待……

若一個正整數無法被除了 1 和它自身之外的任何自然數整除,則稱該數為質數(或素數),否則稱該正整數為合數。

熱點內容
編程主機電腦 發布:2024-11-29 00:43:51 瀏覽:983
oc訪問成員變數嗎 發布:2024-11-29 00:14:59 瀏覽:517
七牛雲伺服器生成縮略圖 發布:2024-11-29 00:12:36 瀏覽:272
如何重設華為賬號密碼 發布:2024-11-29 00:03:33 瀏覽:813
安卓聽小說下載到哪個文件夾 發布:2024-11-29 00:03:01 瀏覽:932
閑魚掛腳本 發布:2024-11-29 00:01:27 瀏覽:630
ae加快緩存 發布:2024-11-28 23:50:34 瀏覽:342
java的版本號 發布:2024-11-28 23:48:18 瀏覽:100
sql存儲過程區別 發布:2024-11-28 23:35:37 瀏覽:919
ms計算機需要什麼配置 發布:2024-11-28 23:34:21 瀏覽:975