幾種排序算法總結(冒泡、選擇、插入、快速)

今天總結了幾個比較基礎常用的排序算法。寫下來,以後可以直接參考。

     var o = {
		//冒泡排序(穩定)
		popSort:function(arr){
			var temp,len;
			for(var i =0;len = arr.length,i<len-1;i++){
				for(var j = 0;j<len-1-i;j++){ //比較趟數
					if(arr[j]>arr[j+1]){ //每趟比較次數len-1-i
						temp = arr[j];
						arr[j] = arr[j+1];
						arr[j+1] = temp;
					}
				}
			}
			return arr;
		},
		//插入排序(穩定)
		/*
		 *假設待排序的記錄存放在數組R[1……n]中,初始時,R[1]自成一個有序區,不需要比較,
		  無序區R[2...n],從i=2起到i=n爲止,依次將R[i]插入當前有序區。
		  帶插入的記錄R[i]從右向左與有序區的R[j]比較,
		  若R[j]>R[i],則R[j]後移一個位置
		  若R[j]<=R[i],則查找結束,j+1即爲R[i]插入位置
		 *
		 */
		insertSort:function(array) { 
  
	    	var i, j, temp,len = array.length;  
	  
	    	for(i = 1; i < len; i ++) { 
	     
	        	temp = array[i];  
	        	for(j = i - 1; j >= 0; j --){          
	            	if(array[j] > temp){                
	                	array[j + 1] = array[j];      
		            }else {             
		                break;  
		            }  
		        }  
		        array[j + 1] = temp;  
		    }
			return array;  
		}, 
		//選擇排序(不穩定)
		selectSort:function (a){  
             var i,j;  
             var t;//臨時暫存變量  
              var len = a.length;  
                  for(i = 0;i<len-1;i++){  
                  
                    for(j = i+1 ;j < len; j++){//將第i個元素與其後各個元素比較  
                        if(a[j]<a[i]){//如果第j個元素比第i個元素小,  
                        
                             t = a[i]; //將最小元素與a[i]交換  
                             a[i] = a[j];  
                             a[j] = t;  
                        }  
                    }  
                 }  
                 return a;  
              },

	//快速排序(不穩定)
		quicksort:function (a,low,high){ 
			 var i = low;
			 var j = high; 
			 var temp = a[i]; //用子集第一個元素作樞軸記錄
			   if( low < high){ 
			     	while(i < j){ //從數組兩端交替向中間掃描 
			       		while((a[j] >= temp) && (i < j)){ j--; } 
			       		a[i] = a[j]; //將比數軸記錄小的移動到低的那一端 
			       		while((a[i] <= temp) && (i < j)){ i++; } 
			       		a[j]= a[i]; //將比數軸記錄大的移動到高的那一端 
			    } 
			    a[i] = temp; //樞軸記錄到位 
			    // quicksort(a,low,i-1); // quicksort(a,j+1,high); 
			    arguments.callee(a,low,i-1); 
			    arguments.callee(a,j+1,high); 
			  } 
			  else{ return; }
			  return a;
			  
	}
};
//o.popSort([1,2,0,-7,11,99,5,-2,2]);
//o.insertSort([1,2,0,-7,11,99,5,-2,2]);
//o.selectSort([1,2,0,-7,11,99,5,-2,2]);	 	 
//o.quicksort([1,2,0,-7,11,99,5,-2,2],0,8); 



測試結果:

如圖:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章