二分法查找
算法就是前后两个指针向中间靠拢来查找
/***二分法查找
* params 要查找的数组
* destNum 要找到的数值
*/
function findNums(params,destNum) {
let mid=Math.ceil(params.length/2)
if(params[mid]==destNum)
return true;
let start=0;
let end=params.length-1;
while(start!=mid){
if(params[start]==destNum
||params[end]==destNum)
return true;
console.log('start',start,mid)
console.log('end',end,mid)
start++;
end--;
}
console.log('没有找到')
return false
}
插入排序
算法主要思路是 抽出一个数据 将数组分成了两部分 数据前面的部分 和数 据后面的部分 。
例如数组 1 ,3 2,1. 取出2,前面部分是1,3 后面部分是1,这个时候要将2插入到1,3里;
//插入排序 从小到大排序
function insertSort(array){
//存储较小的数据 也是待插入到前面部分的数据
var temp=null;
// 第一个循环 从前向后依次取出一个数据
for(var i=1;i<=array.length-1;i++){
if(array[i]<array[i-1]){ //如果后面的数据小于前面的数据 意味着他要插向前面的部分
temp=array[i];
for(var j=i-1;j>=0&&temp<array[j];j--){ //第二个循环 是待插入数据的前面部分
//他已经是一个已经排好的从小到大的数据 是一个有序列了 所以只要temp<array[j]才能进入循环
array[j+1]= array[j];
array[j]=temp;
}
}
}
console.log('插入排序结果', array)
}
insertSort([2,3,2,4,5,4,89,0,985,5,4,36,8,6]);
冒泡排序
其实就是每次循环都把本次循环中最大的数据放到最后面去。
冒泡就是小的上浮 大的下沉。
//从小到大冒泡排序 每次大循环都把最大的数据移动到最前面
function popMaxSort(array){
console.log('原数据',array)
for(var i=0;i<=array.length-1;i++){
var isExchange=false;//设置是否发生了交换 如果不发生交换说明排序已完成
for(var j=0;j<=array.length-1-i;j++){
if(array[j]>array[j+1]){
isExchange=true;//说明还未排序完成
var max= array[j];
array[j]=array[j+1];//小数放前面
array[j+1]=max;//大数放后面
}
}
console.log('冒泡',i,array)
if(!isExchange){//排序已完成就退出循环
break;
}
}
console.log('冒泡排序结果', array)
}
冒泡循环提供另外一种写法 :每次循环都把最小的数据放到最前面
function popMinSort(array){
console.log('原数据',array)
for(var i=0;i<=array.length-1;i++){//控制遍历次数
var isex=false;
for(var j=array.length-1;j>=i;j--){//每一遍都吧最小的数据移动到最前面
//前面 后面
if(array[j-1]>array[j]){
isex=true;
min= array[j];
array[j]= array[j-1];//大的放后面
array[j-1]=min;//小的放前面
}
}
console.log('冒泡',i,array)
if(!isex){//没有发生交换 排序已完成
break;
}
}
console.log('冒泡排序结果', array)
}
快速排序法
//从小到大排序
function quickSort(array){
console.log('原数据',array)
function sort(destArray){
if(!destArray|| destArray.length<=1){
console.log('返回的数据',destArray)
return destArray;
}
var mid= destArray[0];//采用第一个元素做基准
var leftS=[];
var rightS=[];
for(var i=1;i<destArray.length;i++){
if(destArray[i]>mid){//与基准比较 大的放右边 小的放左边
rightS.push(destArray[i])
}else{
leftS.push(destArray[i]);
}
}
return sort(leftS).concat([mid],sort(rightS));
}
array= sort(array);
return array;
}
console.log('快速排序法', quickSort([23,11,89,45,67465,465,456,4,2343,6]))