美文网首页
前端面试 - 算法

前端面试 - 算法

作者: 前端girl吖 | 来源:发表于2018-03-19 14:45 被阅读0次

    https://www.cnblogs.com/tine/p/5938844.html
    时间复杂度:一个算法执行所消耗的时间
    空间复杂度:运行完一个程序所需内存的大小

    • 选择排序:
      两个for循环嵌套,外循环记录每次循环开始的位置,内循环查找本次循环内的最小值;
      实质是每循环一次将查到的最小值放在每次循环的最初开始的位置;
      [先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。]
    function arrSort(arr) {
     var len = arr.length
     var minIndex,temp;
     for(var i = 0;i<len-1;i++){ //遍历次数
         minIndex = i; //每次循坏的第一个数为最小的
         for(var j = i+1;j<len;j++){ //遍历个数
            if(arr[j] < arr[minIndex]) {
             minIndex = j;找到每次循环到的最小值
             }
         }
           temp = arr[i]
           arr[i] = arr[minIndex];//将找到的最小值放在每次循环的最开始的地方
           arr[minIndex] = temp
       }
       return arr
    }
    ----------------------------------------
    var temp;
    for(var i = 0;i<arr.length-1;i++){
       for(var j = i+1;j<arr.length-1;j++){
             if(arr[i]>arr[j]) {
                 temp = arr[j];
                 arr[j] = arr[i];
                 arr[i] = temp 
             }
         }
    }
    
    • 冒泡排序
      依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。
    function BubbleSort(arr){
    let len = arr.length  
    for(var i = 0;i<len-1;i++){
        for(var j =0;j<len-1-i;j++){
           if(arr[j]>arr[j+1])
              var temp = arr[j]
              arr[j] = arr[j+1]
              arr[j+1] = temp
        }
      }
    }
    return arr
    
    • 插入排序 快速排序
      二分查找 元素必须是有序的,否则先进行排序
    // 递归方法:
    function binararySearch(data,item,start,end){
    var start = start || 0;
    var end = end || data.length-1
    var middle = Math.floor((start+end)/2)
    if(item == data[middle]){
      return middle
    }else if(item <  data[middle]) {
        return binararySearch(data,item,start,middle-1)
    }else{
      return binararySearch(data,item,middle+1,end)
        }
     return false;
    }
    
    // 非递归方法
    function binarySearch(data, item){
          var h = data.length - 1,
              l = 0;
             while(l <= h){
              var m = Math.floor((h + l) / 2);
              if(data[m] == item){
                  return m;
              }
              if(item > data[m]){
                 l = m + 1;
             }else{
                 h = m - 1;
             }
         }
         return false;
     }
    ```
    

    相关文章

      网友评论

          本文标题:前端面试 - 算法

          本文链接:https://www.haomeiwen.com/subject/ygghqftx.html