JS August 10, 2018

前端常见算法Js实现

Words count 3.1k Reading time 3 mins. Read count 0

快速排序

var arr = [2,53,53.2,1,1223,5,2,675,967,2,1231,9344,3855,1];

冒泡排序

原理
比较相邻的两个元素,比较大的放置右端

function bubbleSort(arr){
    var i = j =0
    for(var i = 1;i < arr.length;i++){
        for(var j = 0;j <= arr.length - i;j++){
            var temp = 0
            if(arr[j] > arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

// bubbleSort(arr);
// console.log(arr)

快排

原理:
根据基数将分为两部分,一部分的数据要比另一部分的所有数据都要小,然后进行递归调用,直到最后一个元素

function quickSort(arr){
    if (arr.length <= 1) { return arr; }

  var pivotIndex = Math.floor(arr.length / 2) ;

  var pivot = arr.splice(pivotIndex, 1)[0];

  var left = [];

  var right = [];

  for (var i = 0; i < arr.length; i++){

    if (arr[i] < pivot) {

      left.push(arr[i]);

    } else {

      right.push(arr[i]);

    }

  }

    return quickSort(left).concat([pivot], quickSort(right));

}

// console.log(quickSort(arr));

插入排序

原理
1) 从第一个元素开始,该元素可以认为已经被排序

2) 取出下一个元素,在已经排序的元素序列中从后向前扫描

3) 如果该元素(已排序)大于新元素,将该元素移到下一位置

4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

5)将新元素插入到下一位置中

6) 重复步骤2

function insertSort(arr){
// 假设第0个元素开始是有序排序,第1个元素之后是无序排序
// 所以从第1个元素将无需数列的元素插入有序数列中
for(var i = 1; i < arr.length; i++){
    // 升序
    if(arr[i] < arr[i - 1]){
        // 取出无序数组中弟i个元素作为被插入元素
        var guard = arr[i];
        // 记住有序数列的最后一个元素位置,并将数列位置扩大一个
        var j = i - 1;
        arr[i] = arr[j];
        // 比大小找到被插入元素的位置
        while (j >= 0 && guard < arr[j]) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = guard; // 插入
    }
}
}
insertSort(arr);
console.log(arr)

二分查找

原理
二分查找,也为折半查找。首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。
再在两边中寻找中间值,持续以上操作,直到找到所在位置为止。

function binarySort(left,right){
    var result = [],
        il = 0,
        ir = 0;

    while (il < left.length && ir < right.length) {
        if (left[il] < right[ir]) {
            result.push(left[il++]);
        } else {
            result.push(right[ir++]);
        }
    }
    while(left[il]){
        result.push(left[il++]);
    }
    while(right[ir]){
        result.push(right[ir++]);
    }
    return result;
}
console.log(binarySort(arr,1))
0%