• js排序算法01——冒泡排序


    在codewars上面刷题卡住刷不下去了,意识到自己算法方面的不足,准备写一些算法方面的文章,此为一。

    冒泡排序是很常见简单的算法了,每次比较任何两个相邻的项,如果第一个比第二个大,则交换他们,就像气泡一样,冒泡排序因此得名。

    代码实现如下:

    function Bubble(arr){
      if(!Array.isArray(arr)){
    	return false;          //类型判断
    	}
      else{
    	for (var i = arr.length; i > 0; i--) {
    	  for (var j = 0; j < i; j++) {
    		if(arr[j]>arr[j+1]){
    		  var exc;
    		  exc = arr[j];
    		  arr[j] = arr[j+1];
    		  arr[j+1] = exc;
    		 }
    	   }	
    	}
    	return arr;
      }
    }
    var narr = [34,8,64,52,32,21];
    Bubble(narr);
    //[8, 21, 32, 34, 52, 64]
    

      这样每次循环把所循环的数组里最大的数放在最下面。为了判断一次循环后数组是否已经是顺序,可以添加变量记录交换次数,这样可以在每次循环结束时判断交换次数,次数为0则说明当下已经是顺序了,不需要进行循环了,改进后的算法如下:

    function Bubble(arr){
        if(!Array.isArray(arr)){
            return false;          //类型判断
        }
        else{
            for (var i = arr.length; i > 0; i--) {
                var flag = 0;
                for (var j = 0; j < i; j++) {
                    if(arr[j]>arr[j+1]){
                        var exc;
                        exc = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = exc;       //交换位置
                        flag ++ ;             //交换次数
                    }
                }
                if(flag===0){
                    break;
                }    
            }
            return arr;
        }
    }

    最好的情况(已经是顺序)时间复杂度为O(n),最坏的情况(逆序),时间复杂度为O(n2).

  • 相关阅读:
    php函数总结
    文本框输入限制
    e.keyCode和e.which使用
    transform总结
    wampSever的mysql操作
    linux命令总结
    nginx总结
    微雪的stm32学习资料
    串口+RS485驱动
    cubemx+stm32串口学习汇总资料
  • 原文地址:https://www.cnblogs.com/renbo/p/8195679.html
Copyright © 2020-2023  润新知