前端 javascript 小演算法 4個,使用了一點es6語法
阿新 • • 發佈:2018-12-15
1、插入排序
拿出一個數 t = arr[ i ] 和一個位置 pre = i-1,與 arr[ i-1 ] 比較,
如果前面的大於後邊的,( arr[ pre+1 ] = arr[ pre ],pre- - );
如果後邊大於前面 ,i++,pre = i-1
console.log("插入排序:") var arr=[4,2,5,3,1]; console.log(arr); insertionSort(arr); function insertionSort(arr) { for (let i=1;i<arr.length;i++){ let t=arr[i]; let pre=i-1; while (pre > -1 && arr[pre] > t){ arr[pre+1]=arr[pre]; pre--; } arr[pre+1]=t; } console.log(arr); }
2、快速排序
就是二分法,用遞迴的方式
找到中間數,遞迴陣列,最後拼接 concat() 起來
console.log("快速排序(二分法,遞迴)") var arr=[6,8,2,1,5,3,0]; console.log(quickSort(arr)); function quickSort(arr) { if (arr.length < 2){ return arr; } else { var left=[],right=[]; var m=parseInt( (arr.length-1)/2 ); var middle=arr.splice(m,1)[0]; for (let i=0;i<arr.length;i++){ if (arr[i] < middle){ left.push(arr[i]); } else { right.push(arr[i]) } } return quickSort(left).concat(middle,quickSort(right)); } }
3、陣列去重
這個方法增加空間,減少時間複雜度
先定義一個hash{}物件,往hash裡儲存第一次出現的字串;
每次遍歷一個字串都要看看hash裡有沒有對應的字串?有,不推進陣列 r [ ];沒有,推進 陣列 r [ ]
console.log("去重陣列:"); var arr1=['1','1','22','33','33','22','3','2','1']; console.log(arr1); removeCopyWord(arr1); function removeCopyWord(arr) { var r=[]; let hash={}; for (let i=0;i<arr.length;i++){ if (hash[arr[i]]===undefined) { r.push(arr[i]); hash[arr[i]]=1; } } console.log(r); }
4、計算一個只有乘法和加法的表示式 1+23*2+3*3*3=?
先子符串分割 split() 掉 + 號,變成陣列;
再對陣列中的字串分割 * 號成數字,並進行乘法運算,保留結果;
陣列迴圈相加
calculate('1+23*2+3*3*3=?');
function calculate(str) {
var multi=str.split("+");
for (let i=0;i<multi.length;i++){
if (multi[i].includes("*")) {
if (multi[i].includes("=")) {
multi[i]=multi[i].split("=")[0];
}
var arr=multi[i].split("*");
multi[i]=1;
for (let j=0;j<arr.length;j++){
multi[i]*=arr[j];
}
}
}
console.log(multi);
var result=0;
for (let i=0;i<multi.length;i++){
result+=parseInt(multi[i]);
}
console.log(result);
}