zoukankan      html  css  js  c++  java
  • 冒泡排序

    此种算法名为冒泡排序的原因:每一次轮回过后,未排序的值中最大的那个都会“冒”到正确的位置上。

    冒泡排序的步骤

    (1)指向数组中两个相邻的元素(最开始是数组的头两个元素),比较它们的大小。

     

    (2)如果它们的顺序错了(即左边的值大于右边),就互换位置。 如果顺序已经是正确的,那这一步就什么都不用做。

    (3)将两个指针右移一格。 重复第(1)步和第(2)步,直至指针到达数组末尾。

    (4)重复第(1)至(3)步,直至从头到尾都无须再做交换,这时数组就排好序了。 这里被重复的第(1)至(3)步是一个轮回,也就是说,这个算法的主要步骤被“轮回”执行,直到整个数组的顺序正确。

    冒泡排序的效率

    冒泡排序的执行步骤可分为两种。

    •比较:比较两个数看哪个更大。

    •交换:交换两个数的位置以使它们按顺序排列。

    O(N^2) 

    js示例:

    function hasDuplicateValue(array){  
      var steps=0;    
      for(var i=0; i < array.length; i++){      
        for(var j=0; j < array.length; j++){          
          steps++;            
          if(i !== j && array[i] == array[j]){              
            return true;            
          }        
        }  
     }
       console.log(steps);  
       return false;
     }

    嵌套循环算法的效率就是O(N^2)

    线性优化js示例:

    function hasDuplicateValue(array){  
      var steps=0;    
      var existingNumbers=[];    
      for(var i=0; i < array.length; i++){      
        steps++;        
        if(existingNumbers[array[i]] === undefined){          
          existingNumbers[array[i]]=1;        
        } else {         
          return true;        
       }    
     }    
     console.log(steps);    
     return false;
    }

     其大O记法是O(N)。

    参考:数据结构与算法图解.4

  • 相关阅读:
    [mysql] 删除唯一约束unique
    onethink 路由规则无效问题解决
    mysql source 乱码
    NLPIR
    词性标记集--计算所汉语
    [thinkphp] 无限极分类
    UITableViewCell在非Nib及Cell重用下设置CellStyle
    UIViewController的初始化
    转:NSString / NSData / char* 类型之间的转换
    转:苹果Xcode帮助文档阅读指南
  • 原文地址:https://www.cnblogs.com/ooo0/p/12151825.html
Copyright © 2011-2022 走看看