js 常用算法

1,936 阅读1分钟
  • 二分查找(折半查找)
  • 递归
  • 反转
  • 冒泡排序
  1. 二分查找(含递归)
  • 原理:先折半一分为二,开始比较,再折半一分为二.......
  • 优点:查找效率比利用循环高
  • 要求:必须是一个有序的数组,例[1,3,5,7]
  • 例子:

let arr = [22,21,16,14,10,7,5,3,1];
function dichotomy(min,max,num){
	let mid =Math.floor((max+min)/2);
	if(arr[mid]==num){
		return mid;
	};
	if(num<arr[mid]){
		return dichotomy(mid+1,max,num);
	};
	if(num>arr[mid]){
		return dichotomy(0,mid-1,num);
	};
};
let i = dichotomy(0,arr.length-1,14);
console.log(i);

2.反转

//原理
let str = 'abcdef';
let arr = str.split('');
let i=0, j = arr.length-1;
			
while(i<j){
	let temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
	i++;
	j--;
};
			
console.log(arr);

//通过数组方法
let str = 'abcdef';
let arr = str.split('').reverse().join('');

console.log(arr);

3.冒泡排序

  • 原理:循环嵌套,不断的交换位置

let arr = [21,11,44,21,12,14,32,,53];
for(let i=0;i<arr.length;i++){
	for(let j=0;j<arr.length;j++){
		if(arr[i]>arr[j]){
			let temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
}
console.log(arr);
//第一项
[11,21,44,21,12,14,32,53]
//第二项
[21,11,44,21,12,14,32,53]
//第三项
[44,21,11,21,12,14,32,53]
//第四项
[44,21,21,11,12,14,32,53]
//第五项
[44,21,21,12,11,14,32,53]
//第六项
[44,21,21,14,12,11,32,53]
//第七项
[44,31,21,21,14,12,11,53]
//第八项
[53,44,31,21,21,14,12,11]