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);

  節省了一些不必要的循環,提高了運算速度!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM