js中的基础排序算法

var arr = [6,4,9,8,7,3,1,6];

1、内置的sort排序:

function sort (arr) {
    return arr.sort(function(a,b) {
      return a-b;
    })
}

2、冒泡排序:

function bubbleSort(arr) {
    var len = arr.length;
    var temp;
    for (var i=0;i<len-1;i++) {
      for (var j=0;j<(len-i)-1;j++) { //len-i是因为i为已排好的个数,已排好的位置不用继续判断,-1是最后一位已经排好最大的数,不用处理。
        console.log(i,j,arr[j], arr[j+1])
        if (arr[j] > arr[j+1]) {
          temp = arr[j+1];
          arr[j+1] = arr[j];
          arr[j] = temp;
        }
        console.log(arr)
      }
    }
    return arr;
}

3、快速排序:

function quickSort(arr) {
    if (arr.length <= 1) {
      return arr;
    }
    var pivotIndex = Math.floor(arr.length/2);
    // var pivot = arr[pivotIndex];
    var pivot = arr.splice(pivotIndex,1)[0];
    var left = [];
    var right = [];
    var len = arr.length;
    for (var i=0;i<len;i++) {
      if (arr[i] < pivot) {
        left.push(arr[i]);
      } else {
        right.push(arr[i]);
      }
    }
    return quickSort(left).concat([pivot],quickSort(right));
}

4、选择排序:

function selectionSort (arr) {
    var len = arr.length;
    var temp,minIndex;
    for (var i=0;i<len-1;i++) {
      minIndex = i;
      for (var j=i+1;j<len;j++) {
        if (arr[j] < arr[minIndex]) { //寻找最小的数
          minIndex = j; //将最小数的索引保存
        }
      }
      temp = arr[i];
      arr[i] = arr[minIndex];
      arr[minIndex] = temp;
    }
    return arr;
}

5、插入排序:

function insertionSort (arr) {
    var len = arr.length;
    var preIndex,current;
    for (var i=1;i<len;i++) {
      preIndex = i-1;
      current = arr[i];
      while (preIndex >= 0 && arr[preIndex] > current) { //循环判断满足条件的情况
        console.log(preIndex, current, arr)
        arr[preIndex+1] = arr[preIndex]; //如果在前面的数寻找到大于current的就将前面的这个数往后移动一位
        preIndex--; //继续往前寻找有没有小于current的数
      }
      arr[preIndex+1] = current; // 寻找完所有前面满足条件的数后,将current数放到最后一次往后移动的数的原始位置(因为while里preIndex做了- -处理,所以这里需要+1才是原始位置)
    }
    return arr;
  }

6、归并排序:

function mergeSort(arr) {  // 采用自上而下的递归方法
    var len = arr.length;
    if(len < 2) {
      return arr;
    }
    var middle = Math.floor(len / 2),
      left = arr.slice(0, middle),
      right = arr.slice(middle);
    console.log('mergeSort', left, right)
    // var paramsLeft = mergeSort(left);
    // var paramsRight = mergeSort(right);
    return merge(mergeSort(left), mergeSort(right)); //mergeSort(left)和mergeSort(right)先将left和right的顺序排列好,最后再将排列好的left和right merge处理
    // return merge(paramsLeft, paramsRight);
  }

  function merge(left, right) {
    console.log('merge', left, right)
    var result = [];

    while (left.length && right.length) { // 循环判断,当一边的数据被处理完后不再对两边数据进行对比
      if (left[0] <= right[0]) {
        result.push(left.shift());
      } else {
        result.push(right.shift());
      }
    }
    while (left.length) //将剩下的数据依次保存到result后面
      result.push(left.shift());

    while (right.length) //将剩下的数据依次保存到result后面
      result.push(right.shift());

    console.log('merge', result)
    return result;
}
console.log(mergeSort(test))

 

。。。。。。

posted @ 2023-05-09 14:17  Amor丶Diamond  阅读(43)  评论(0编辑  收藏  举报