美文网首页
JS实现堆排序

JS实现堆排序

作者: shirleyyu001 | 来源:发表于2017-06-19 21:23 被阅读0次
原理

堆排序原理

实现
(function(){
  'use strict';
  var heapAdjust=(function f(arr,i){
    var len=arr.length,
        j=i*2;
    if(i>0 && j<=len){
      if(isNaN(arr[j-1]) || isNaN(arr[i-1])){
        return 'isNaN';
      }

      if(j+1<=len){
        if(isNaN(arr[j])){
          return 'isNaN';
        }

        if(arr[j-1]<=arr[j]){
          if(arr[i-1]>arr[j-1]){
            [arr[i-1],arr[j-1]]=[arr[j-1],arr[i-1]];
            f(arr,j);
          }
        }else{
          if(arr[i-1]>arr[j]){
            [arr[i-1],arr[j]]=[arr[j],arr[i-1]];
            f(arr,j+1);
          }
        }
      }else{
        if(arr[i-1]>arr[j-1]){
          [arr[i-1],arr[j-1]]=[arr[j-1],arr[i-1]];
          f(arr,j);
        }
      }
    }
    return arr;
  });

  function heapSort(arr){
    var temp=[],
        a=arr,
        len=arr.length;
    if(!Array.isArray(arr)){
      console.log('this is not a array!');
      return arr;
    }

    for(var k=0;k<len;k++){
      for(var x=Math.floor(a.length/2);x>0;x--){
        a=heapAdjust(a,x);
        if(a==='isNaN'){
          console.log('this is not a pure numeric array!');
          return arr;
        }
      }
      temp.push(a[0]);
      a=a.slice(1,len);
    }
    return temp;
  }

  var array1='1111';
  var array2=[3,2,53,67765,3243,44,'aaaa'];
  var array3=[3,2,53,67765,3243,44,2,3,567,342,6785,976,643,2342,23423,4564,678,23325,854,2324,345435,457];
  console.log(heapSort(array1));
  console.log(heapSort(array2));
  console.log(heapSort(array3));
})();
说明
  • 堆排序对大文件很有效
  • 堆排序是不稳定排序

相关文章

  • JS实现堆排序

    堆的预备知识 堆是一个完全二叉树。 完全二叉树: 二叉树除开最后一层,其他层结点数都达到最大,最后一层的所有结点都...

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • 堆排序 js实现

    /* 最近 在看c语言版的数据结构,c用法着实很难,于是按照意思,仿照c语言写了javascript版的三种排序方...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • ks又面挂一家

    1.了解AMD吗?require.js2.堆排序3.原生ajax请求4.jsonp跨域实现5.组建间通信

  • 堆排序的实现

    用大顶堆实现堆排序

  • 大顶堆生成、新增、删除、排序javascript实现

    大顶堆小顶堆的概念和使用本文不赘述,使用js实现一个大顶堆的创建,新增,删除以及利用大顶堆排序

  • 堆排序(非递归版)

    时间复杂度是O(nlogN) 但是不常用堆排序,因为堆排序不稳定 Java实现

  • 堆排序(js)

    堆排序原理解释:先将数组看成一个堆,最大的非叶子节点:(size/2),i节点的父亲节点:(i/2-1),i节点的...

网友评论

      本文标题:JS实现堆排序

      本文链接:https://www.haomeiwen.com/subject/phenqxtx.html