版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

下面只说冒泡和快排
实现思路:
实现:
function bubbleSort(arr) {
  var len = arr.length;
  for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j+1]) {
        var temp = arr[j+1];
        arr[j+1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}
 
快速排序的基本思想:通过⼀趟排序将待排记录分隔成独⽴的两部分,其中⼀部分记录的关键字均⽐另⼀部分的关键字 ⼩,则可分别对这两部分记录继续进⾏排序,以达到整个序列有序。
1.从数组中选择中间⼀项作为主元; 2.创建两个指针,左边⼀个指向数组的第⼀项,右边指向数组最后⼀项。移动左指针直到我们找到⼀个⽐主元⼤的元 素,接着,移动右指针直到找到⼀个⽐主元⼩的元素。然后交换它们,重复这个过程,直到左指针超过了右指针。这个 过程是的⽐主元⼩的值都排在了主元之前,⽽⽐主元⼤的值都排在了主元之后,这⼀步叫划分操作。 3.接着,算法对划分的⼩数组(较主元⼩的值组成的⼦数组,以及较主元⼤的值组成的⼦数组)重复之前的两个步骤, 直⾄数组以完全排序。
// 快速排序
const quickSort = (function() {
  // 默认状态下的⽐较函数
  function compare(a, b) {
    if (a === b) {
      return 0;
    }
    return a < b ? -1 : 1;
  }
  function swap(array, a, b) {
    [array[a], array[b]] = [array[b], array[a]];
  }
  // 分治函数
  function partition(array, left, right) {
    // ⽤index取中间值⽽⾮splice
    const pivot = array[Math.floor((right + left) / 2)];
    let i = left;
    let j = right;
    while (i <= j) {
      while (compare(array[i], pivot) === -1) {
        i++;
      }
      while (compare(array[j], pivot) === 1) {
        j--;
      }
      if (i <= j) {
        swap(array, i, j);
        i++;
        j--;
      }
    }
    return i;
  }
  // 快排函数
  function quick(array, left, right) {
    let index;
    if (array.length > 1) {
      index = partition(array, left, right);
      if (left < index - 1) {
        quick(array, left, index - 1);
      }
      if (index < right) {
        quick(array, index, right);
      }
    }
    return array;
  }
  return function quickSort(array) {
    return quick(array, 0, array.length - 1);
  };
})();