js簡單演算法
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毫秒,更加高效。通過這樣的改進,我們得到了完整的冒泡排序演算法。
總結而言,冒泡排序涉及外層循環控制整個排序過程,內層循環用於元素的比較和交換。找到最大值並置於數組末端,直至完成排序。
希望以上內容能幫助到您。如果您覺得有幫助,不妨收藏關注。謝謝!