开发者社区> 问答> 正文

你所知道的排序算法?

展开
收起
前端问答 2019-12-15 15:41:27 887 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    image.png

    下面只说冒泡快排

    冒泡排序(Bubble Sort)

    实现思路:

    1. ⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换他们两个。
    2. 对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对。这步做完后,最后的元素会是最⼤的数。
    3. 针对所有的元素重复以上的步骤,除了最后⼀个。
    4. 持续每次对越来越少的元素重复上⾯的步骤,直到没有任何⼀对数字需要⽐较。

    实现:

    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;
    }
    

    快速排序(Quick Sort)

    算法简介

    快速排序的基本思想:通过⼀趟排序将待排记录分隔成独⽴的两部分,其中⼀部分记录的关键字均⽐另⼀部分的关键字 ⼩,则可分别对这两部分记录继续进⾏排序,以达到整个序列有序。

    算法描述和实现

    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);
      };
    })();
    
    

    参考:⼗⼤经典排序算法总结(JavaScript描述)

    2019-12-15 15:49:20
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载