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);
}
console.log("去重数组对象:");
var arr1=[{id:1,name:'可恶'},{id:1,name:'可恶'},{id:1,name:'可恶'},{id:2,name:'可恶'}];
console.log(arr1);
removeCopyObject(arr1,'id');
removeCopyObject(arr1,'name');
function removeCopyObject(arr,name) {
var r=[];
let flag=false;
for (let i=0;i<arr.length;i++){
if(r.length==0){
}else{
for(let j=0;j<r.length;j++){
if(r[j][name]==arr[i][name]){
flag =true;//存在
break;
}
}
}
if(!flag){r.push(arr[i])}
}
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);
}