1.面试题 排序算法总结

一:排序

1.冒泡 排序

原生:var arr=[5,4,3,2,1];

for (var i=0; i<arr.length-1; i++){

//第一次循环比较轮数

for (var j=0; j<arr.length-1-i;j++){

//第2次循环比较次数

 if(arr[j]>arr[j+1]){

借助第3放变量进行交换

var temp =arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

 调用api:

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

function sortNumber(a, b)
{
return a - b
}

console.log('arr',arr);

console.log('arr.sort(sortNumber)',arr.sort(sortNumber));

二 :数组反转

原生:

arr =[1,2,3,4,5,6,7,8];

for (var i=0;i<arr.length/2;i++){

// arr[0] arr[arr.length-1-0]

// arr[1] arr[arr.length-1-1]

// arr[2] arr[arr.length-1-2]

// arr[3] arr[arr.length-1-3]

var temp = arr[i];

arr[i]= arr[arr.length-1-i];

arr[arr.length-1-i]=arr[i];

}

直接调用:arr.reverse()

三:数组中去重
原生:
思路:1.创建一个新数组,把原数组中得第一个元素插入到新数组中
   2.遍历原数组中得每一个元素分别和新数组中得每一个元素进行比较
//原数组
var arr=[1,2,3,4,5,6,7,7,7,7,7,8,8,8];
//新数组
var arr2=[];
arr2[0]=arr[0];

for (var i=0;i<arr.length;i++){
for (var j=0;j<arr2.length;j++){
if(arr2[j]==arr[i]){
break;
}
if(j===arr2.length-1){
arr2.push(arr[i]);
}
}
}
四、在字符串中输出次数最多的字符,并返回次数
    this.handle('hello');
 
 
  handle = (param) => {
    if (param.length == 1) {
      return param;
    }
    let newObj = {};
    for (let i = 0; i < param.length; i++) {
      if (!newObj[param.charAt(i)]) {
        newObj[param.charAt(i)] = 1;
      } else {
        newObj[param.charAt(i)] += 1;
      }
      console.log('123', newObj[param.charAt(i)])

      console.log('22222', newObj);
    }
    var maxObj = {
      maxkey: "",
      maxvalue: 0
    }
    for (var k in newObj) {
      if (newObj[k] > maxObj.maxvalue) {
        maxObj.maxvalue = newObj[k];
        maxObj.maxkey = k;
      }
    }
    console.log('3333', maxObj);
    return maxObj;
  }
六、 breack和continue

 

 
原文地址:https://www.cnblogs.com/web-zxq/p/12825327.html