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

  • 相关阅读:
    Button 使用Command 按钮置灰未更新
    C# TextBox 焦点
    MultiTigger 绑定异常处理
    C# 获取程序路径
    Linux 权限设置chmod
    WPF SpreadSheetGear电子表单
    WPF 窗口
    Excel公式 提取文件路径后缀
    C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
    DevExpress Carousel 设置水平滑动列表
  • 原文地址:https://www.cnblogs.com/ooo0/p/12151825.html
Copyright © 2011-2022 走看看