美文网首页
常见的几种数组排序算法JS实现

常见的几种数组排序算法JS实现

作者: hwj6820 | 来源:发表于2019-08-02 17:30 被阅读0次

1,快速排序

从给定的数据中,随机抽出一项,这项的左边放所有比它小的,右边放比它大的,然后再分别这两边执行上述操作,采用的是递归的思想,总结出来就是 实现一层,分别给两边递归,设置好出口

function fastSort(array,head,tail){

    //考虑到给每个分区操作的时候都是在原有的数组中进行操作的,所以这里head,tail来确定分片的位置

    /*生成随机项*/

    var randomnum = Math.floor(ranDom(head,tail));

    var random = array[randomnum];

    /*将小于random的项放置在其左边  策略就是通过一个临时的数组来储存分好区的结果,再到原数组中替换*/

    var arrayTemp = [];

    var unshiftHead = 0;

    for(var i = head;i <= tail;i++){

      if(array[i]<random){

        arrayTemp.unshift(array[i]);

        unshiftHead++;

      }else if(array[i]>random){

        arrayTemp.push(array[i]);

      }

      /*当它等于的时候放哪,这里我想选择放到队列的前面,也就是从unshift后的第一个位置放置*/

      if(array[i]===random){

        arrayTemp.splice(unshiftHead,0,array[i]);

      }

    }

    /*将对应项覆盖原来的记录*/

    for(var j = head , u=0;j <= tail;j++,u++){

      array.splice(j,1,arrayTemp[u]);

    }

    /*寻找中间项所在的index*/

    var nowIndex = array.indexOf(random);

    /*设置出口,当要放进去的片段只有2项的时候就可以收工了*/

    if(arrayTemp.length <= 2){

      return;

    }

    /*递归,同时应用其左右两个区域*/

    fastSort(array,head,nowIndex);

    fastSort(array,nowIndex+1,tail);

}

2,插入排序

思想就是在已经排好序的数组中插入到相应的位置,以从小到大排序为例,扫描已经排好序的片段的每一项,如大于,则继续往后,直到他小于一项时,将其插入到这项的前面

function insertSort(array){

    /*start根据已排列好的项数决定*/

    var start=1;

    /*按顺序,每一项检查已排列好的序列*/

    for(var i=start; i<array.length; start++,i++){

      /*跟已排好序的序列做对比,并插入到合适的位置*/

      for(var j=0; j<start; j++){

        /*小于或者等于时(我们是升序)插入到该项前面*/

        if(array[i]<=array[j]){

          console.log(array[i]+' '+array[j]);

          array.splice(j,0,array[i]);

          /*删除原有项*/

          array.splice(i+1,1);

          break;

        }

      }

    }

}

3,冒泡排序

故名思意 ,就是一个个冒泡到最前端或者最后端,主要是通过两两依次比较,以升序为例,如果前一项比后一项大则交换顺序,一直比到最后一对

function bubbleSort(array){

    /*给每个未确定的位置做循环*/

    for(var unfix=array.length-1; unfix>0; unfix--){

      /*给进度做个记录,比到未确定位置*/

      for(var i=0; i<unfix;i++){

        if(array[i]>array[i+1]){

          var temp = array[i];

          array.splice(i,1,array[i+1]);

          array.splice(i+1,1,temp);

        }

      }

    }

  }

4,选择排序

将当前未确定块的min或者max取出来插到最前面或者后面

function selectSort(array){

    /*给每个插入后的未确定的范围循环,初始是从0开始*/

    for(var unfixed=0; unfixed<array.length; unfixed++){

      /*设置当前范围的最小值和其索引*/

      var min = array[unfixed];

      var minIndex = unfixed;

      /*在该范围内选出最小值*/

      for(var j=unfixed+1; j<array.length; j++){

        if(min>array[j]){

          min = array[j];

          minIndex = j;

        }

      }

      /*将最小值插入到unfixed,并且把它所在的原有项替换成*/

      array.splice(unfixed,0,min);

      array.splice(minIndex+1,1);

    }

  }

相关文章

  • 常见的几种数组排序算法JS实现

    1,快速排序 从给定的数据中,随机抽出一项,这项的左边放所有比它小的,右边放比它大的,然后再分别这两边执行上述操作...

  • 7大经典的排序算法总结实现

    作者 : 专注J2EE来源 : 博客园 常见排序算法总结与实现 本文使用Java实现这几种排序。以下是对排序算法总...

  • JavaScript 实现多种排序算法

    本章将介绍 JavaScript 如何实现排序,几种排序算法介绍如下图: 准备工具函数 util.js 备用: 借...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • JS几种常见的数组排序

    数组这个小哥。无论实在哪一门语言里面我们都能看见他的身影,操作数组的方法,每门语言都不一样,但是最终的效果都是一样...

  • 【js】数组常见的几种排序...

    js常见的排序方式有选择排序、插入排序、冒泡排序、快速排序。 选择排序,应该是一种不稳定的排序方式,怎么个不稳定法...

  • 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现。 排序是数据结构主要内容,并不限于语言主要在于思想;...

  • js几种常见的排序算法

    冒泡排序: 原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放...

  • 数组的排序算法的实现

    数组的排序算法 关于排序算法请看这篇文章。本文尝试使用js来实现一部分简单的算法。 选择排序 思路:若要从小到大排...

网友评论

      本文标题:常见的几种数组排序算法JS实现

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