zoukankan      html  css  js  c++  java
  • js面试常考之数组冒泡排序

    js的数组排序

    给出一个无需的数字数组,让写冒泡排序:

    解析:冒泡排序是指由第一项数与第二项的数相比较,第一项大的话两者互换位置,若第二项大的话就位置不变;

       在接着比较第二第三项,比较结果重复上一个步骤;(内for循环)

         第一次比较完后在从第二项开始在按上一环节比较;(外for循环)

            只到循环完最后第二项为止;

    举例数组 arr = [3,56,4,1,34,78,23,59,66,42];

            //冒泡排序
    	function arrSort(arr){
    		var len = arr.length;
    		for(var i = 0; i <len; i++){ //确定需要循环的次数
    			for(var j = 0; j < len-1-i; j++){
    				if(arr[j]>arr[j+1]){ //相邻的两项作比较
    					var nu = arr[j+1];
    					arr[j+1] = arr[j];
    					arr[j]= nu;
    				}
    			}
    		}
    		console.log(arr);
    	}
    	arrSort(arr);    
    

     但是这个两个for循环如果数据量大了会相当消耗内存的运算;因为在每次内for循环一次完毕后都以找出一个最大数放在最后的位置,

    外循环没粗循环到最后几位都要重新循环,为节省循环次数在每次内for循环最后一次换位置的地方做标记;

     2.改进冒泡排序:

           function arrSort2(arr){
    		var i = arr.length-1;
    		while (i>0) {
    			console.log(i)//这里依次由大到小打出arr的每项数据位置索引(除去第一项0),
    			var pos = 0;//每次循环将标记的位置定位0;
    			for(var j=0;j<i;j++){
    				if(arr[j]>arr[j+1]){
    					pos=j;
    					var nu = arr[j+1];
    					arr[j+1] = arr[j];
    					arr[j]= nu;
    
    				  }
    			  }
    			  i=pos;//最后一个交换的位置;
    		 }
    		 console.log(arr);
    	    }
    	    arrSort2(arr);
    

      节省了一些不必要的循环,提高了运算速度!

  • 相关阅读:
    lintcode-144-交错正负数
    lintcode-143-排颜色 II
    lintcode-142-O(1)时间检测2的幂次
    lintcode-141-x的平方根
    lintcode-138-子数组之和
    postman-----使用CSV和Json文件实现批量接口测试
    postman—创建collection,执行collection和批量执行
    postman-变量
    postman-鉴权
    Postman—cookie
  • 原文地址:https://www.cnblogs.com/suzhen-2012/p/6713638.html
Copyright © 2011-2022 走看看