js常見算法總結--數列求和、有序數組搜索、數組去重、數組排序

數列求和

  • 等差數列求和
function sum(a0,d,n){//a0->首項,d->公差,n->項數
	return (a0+(a0+(n-1)*d))*n/2;//(首項+末項)*項數/2
}
  • 等比數列求和
function sum(a0,q,n){//a0->首項,q->公比,n->項數
	if(q!=1){
		return a0*(1-Math.pow(q,n))/(1-q);//首項*(1-公比的n次方)/(1-公比)
	}else{
		return a0*n;
	}
}

有序數組搜索

  • 分治+遞歸
function indexOf(arr,val){
	var i=Math.floor(arr.length/2);
	if(arr[i]===val){
		return i;
	}
	if(arr.length==1){
		return -1;
	}
	if(val<arr[i]){
		return indexOf(arr.slice(0,i),val);
	}else{
		var result=indexOf(arr.slice(i+1),val);
		return result==-1?result:i+1+result;
	}
}

數組去重

Array.from(new Set(arr))//Set是ES6的新特性,是一種無序無重複元素的集合;Array.from也是ES6的新特性,將類數組轉化爲數組

數組排序

  • 冒泡排序
function bubbleSort(arr){
	var l=arr.length;
	var tmp;
	var flag;
	for(var i=0;i<l;++i){
		flag=false;
		for(var j=0;j<l-i-1;++j){
			//相鄰兩個數比較,大的換到後面
			if(arr[j]>arr[j+1]){
				tmp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=tmp;
				flag=true;
			}
		}
		//若是這一輪循環沒有出現交換,說明全部排序已經完成,直接結束全部循環
		if(!flag){
			break;
		}
	}
	return arr;
}
  • 插入排序
function insertSort(arr){
	var l=arr.length;
	for(var i=1;i<l;++i){
		var item=arr[i];
		for(var j=0;j<i;++j){
			if(arr[j]>item){
				arr.splice(j,0,item);//將item插入到下標爲j的位置
				arr.splice(i+1,1);//將原來的item刪除
				break;
			}
		}
	}
	return arr;
}
  • 快速排序
function quickSort(arr){
	var l=arr.length;
	if(l<=1){
		return arr;
	}
	var base=arr[0];//基準數
	var left=[],right=[];
	for(var i=1;i<l;i++){
		var item=arr[i];
		//小於基準數放左邊,不然放右邊
		if(item<base){
			left.push(item);
		}else{
			right.push(item);
		}
	}
	return quickSort(left).concat(base,quickSort(right));
}
相關文章
相關標籤/搜索