JavaScript(算法1)

1、冒泡排序

依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确

 

function sort1(array) {
  for(var i = 0;i<array.length;i++) {
    for (var j = 0;j<array.length-1;j++){
      if(array[j+1]<array[j]) {
        let temp = array[j];
        array[j]=array[j+1];
        array[j+1] = temp;
      }
    }
  }
  console.log('排序后:'+array);
}

2、快速排序

在需要排序的数组中,任选一个元素作为“基准”,将小于“基准”和大于“基准”的元素分别放到两个新的数组中,等于“基准”的元素可以放在任一数组,并重复上述步骤

 

function quickSort(array) {
  if(array.length<=1) {
    return array
  } else{
    var len = Math.floor(array.length/2)
    var temp = array.splice(len,1);
    // 一定要将基准数从原数组删除,以方便将其拼接在新数组中间,否则将造成死循环
    var left=[];
    var right=[];
    for(var i = 0;i<array.length;i++) {
      if(array[i]<temp){
        left.push(array[i]);
      } else {
        right.push(array[i]);
      }
    }
    return quickSort(left).concat([temp],quickSort(right))
  }
}

3、数组去重

 

function duplicates(arr) {
  var resArr = [];
  var flag = true;
  for(var i=0;i<arr.length;i++){
    if(resArr.indexOf(arr[i]) == -1){
      if(arr[i] != arr[i]){// 排除掉NaN 
        if(flag){
          resArr.push(arr[i]);
          flag = false;
        }
      }else{
        resArr.push(arr[i]);
      }
    }
  }
    return resArr;
}

4、对象拷贝

使用递归深层拷贝对象的属性,偷懒方法:JSON.stringfy()和JSON.parse();数组复制可以使用ES6新语法,使用"..."扩展符,使用扩展符复制对象只是复制了对象本身(即只复制了一层,对象内的引用类型属性是指向同一地址的)。

function deepClone(obj){
  var newObj = obj.constructor === Array ? []:{};
  if(typeof obj !== 'object'){
      return
  }else{
      for(var i in obj){
          if(obj.hasOwnProperty(i)){
              newObj[i] = typeof obj[i] === 'object'?deepClone(obj[i]):obj[i];
          }
      }
  }
  return newObj
}

5、字符串转驼峰

递归实现方式:

function cssStyle2DomStyle(sName) {
  if(sName.indexOf('-')<0){
    return sName;
  }
  sName= sName.split('');
  var n = sName.indexOf('-');
  sName.splice(n,1);
  if(n>0) {
    sName[n]=sName[n].toUpperCase()
  }
  sName = sName.join('')
  return cssStyle2DomStyle(sName)
}

 循环替换

function cssStyle2DomStyle2(sName) {
  var arr = sName.split(''); 
  if(arr.indexOf('-') == 0)
    arr.splice(0,1);
  for(var i=0; i<arr.length; i++){
    if(arr[i] == '-'){
      arr.splice(i,1);
      arr[i] = arr[i].toUpperCase();
    }
  }
  return arr.join('');
}

 

6、查找字符串中出现最多的字符

  • 对每一个字符进行次数统计
  • 保存出现的最大次数max
  • 循环出与max相对应的字符

 

function maxNumber(array) {
  var arr = [];// 保存出现的字符
  var count = []; // 对应字符出现的次数
  var max = '';// 最大次数
  var str=''
  for(var i=0;i<array.length;i++){
    if(arr.indexOf(array[i])<0){
      arr.push(array[i])
      count.push(1)
    } else{
      let n=arr.indexOf(array[i]);
      count[n]+=1;
    }
  }
  console.log('字符', arr);
  console.log('次数',count);
  for (var j = 0;j<count.length;j++){
    if(count[j]>max) {
      max = count[j];
    }
  }
  for(var d=0;d<count.length;d++){
    if(max===count[d]){
      str = str+arr[d]+','
    }
  }
  console.log('出现次数最多的字符'+str+'次数'+max)
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值