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

  • 相关阅读:
    Linux新手随手笔记2.4-使用DHCP动态管理主机地址
    在word中输入任意角度旋转图片
    VBA注释临时
    VBA改写VBA代码
    【转载】robocopy的用法
    Excel数组排序+图片统一大小
    一键调节音量
    合并文档时让第一页为奇数
    智能跳转---TC资源管理器
    win7一键拖动生成快速启动栏
  • 原文地址:https://www.cnblogs.com/ooo0/p/12151825.html
Copyright © 2011-2022 走看看