几种排序算法总结(冒泡、选择、插入、快速)

今天总结了几个比较基础常用的排序算法。写下来,以后可以直接参考。

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

 


测试结果:

如图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值