js常用的算法整理

1.二分查找法

 function binarySearch(A,x){
    var low = 0,high = a.length -1;
    while(low<=high){
        var mid = Math.floor((low+high)/2);
        if(x==A[mid]){
            return mid;
        }
        if(x<A[mid]){
            high = mid -1;
        }
        else{
            low = mid +1;
        }
    }
    return -1;
  }

2.冒泡排序法

第一次遍历出最大的数,放到最后,依次类推....

function bubblesort(A) {
    for(var i = 0;i<A.length;i++){
        var sorted = true;
        for(var j = A.length-1;j>i;j--) {
            if(A[j] < A[j-1]) {
                swap(A,j,j-1);
                sorted = false;
            }
        }
        if(sorted) {
            return;
        }
    }
}
function swap(arr,i,j){//用于交换数据
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp; 
    return arr;
}
var arr1 = [3,2,4,6,1,9]
bubblesort(arr1)
console.log(arr1)//[1,2,3,4,6,9]

3.选择排序法

每次一次遍历出最小的,存放于A[k]中

function selectionSort(A) {
    for(var i = 0 ;i<A.length -1;i++){
        var k = i;//用于存放此次出最小的数
        for(var j = i+1;j<A.length;j++){
            if(A[j] <A[k]) {
                k = j;
            }
        }
        if( k != i) {
           var temp = A[k];
           A[k] = A[i];
           A[i] = temp;
        }
    }
    return A;
}
var A = [2,4,1,3,8,4];
selectionSort(A) //[1, 2, 3, 4, 4, 8]

4.插入排序法

function inserSort(A) {
    for(var i  = 0;i<A.length;i++){
        var x =A[i];
        for(var j = i-1;j>=0&&A[j]>x;j--) {
            A[j+1] = A[j];
        }
        if(A[j+1] !=x) {
        A[j+1] =x;
    }
    }
   
}
var A=[0,1,3,2,4,9];
inserSort(A);
console.log(A)

5.插排序法(用的比较少)

function inserSort(A) {
    for(var i  = 0;i<A.length;i++){
        var x =A[i]; //x=1
        for(var j = i-1;j>=0&&A[j]>x;j--) {
            A[j+1] = A[j];
            A[1]=A[0]
        }
        if(A[j+1] !=x) {
        A[j+1] =x;
    }
}
   
}
var A=[2,1,3,2,4,9];
inserSort(A);
console.log(A)//[1, 2, 2, 3, 4, 9]

6.递归找最大值

function findMax(A,i) {
    if(i==0) {
        return A[0];
    }
    var x = A[i-1];
    var y = findMax(A,i -1);
    return y>x ? y:x;
}
var A=[2,4,3,8,5,3]
var m=findMax(A,A.length);//8

 

  

  

原文地址:https://www.cnblogs.com/leonel/p/6653655.html