zoukankan      html  css  js  c++  java
  • 堆排序和快速排序

    堆排序

    1.完全二叉树

    简单的来讲,完全二叉树就是除了最后一行外都排满了,最后一行都靠左排的二叉树。

    2.大小根堆

    简单的来说,就是根比子节点的二叉树要小就是小堆根,根比子节点要大的就是大堆根

    3.堆排序

    1)构造原始堆(最右下的节点开始,两个子节点较大而且比自己大就换上来)

    2)把根节点和最下最右的叶片节点互换,然后输出这个本来的根节点

    3)重复一二步动作,直至全部排序完

    这种算法对算出前几个最大(小)的数效率是较为好的,当然排序完所有的数的效率最快还是快速排序,以后会写博文介绍~~

    快速排序

    第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)

    第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。

    第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

    js实现:

    var quickSort = function(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));
    };
  • 相关阅读:
    正则表达式和re模块
    面向对象基础
    面向对象高级
    网络编程
    collectiontimeossysjson模块
    继承
    封装
    我在吃饭
    111
    关于羽毛球拍
  • 原文地址:https://www.cnblogs.com/amiezhang/p/7418863.html
Copyright © 2011-2022 走看看