博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js排序算法整理
阅读量:6343 次
发布时间:2019-06-22

本文共 2706 字,大约阅读时间需要 9 分钟。

冒泡排序

思想:

  1. 当前项和后一项进行比较 如果当前项大于后一项则 交换位置
var arr = [29, 10, 34, 40, 18];    function bubbleSort(arr) {        for (var i = 0; i < arr.length - 1; i++){            for (var j = 0; j < arr.length - 1 - i; j++){                var num = arr[j];                if(arr[j] > arr[j + 1]){                    arr[j] = arr[j + 1];                    arr[j + 1] = num;                }            }        }        return arr;    }    bubbleSort(arr) // [10, 18, 29, 34, 40]复制代码

插入排序

思想:

  1. 插入排序是从后往前比较, 从第二项开始一次往前比较 如果当前项大于前一项 则停止比较并将当前项插入到前一项的后面
function insertC(A) {      for (let i = 1; i < A.length; i++) {        // p 指向 下一个要比较的索引        let p = i - 1            // 当前要插入项        let cur = A[i]                // 只要前一项大于当前项就一直循环下去        while(p >= 0 && A[p] > cur) {          // 前一项大于当前项 就将前一项往后挪一位          A[p + 1] = A[p]          // 每比较完一次 p存储的索引值 就往前挪一位 进行下次比较          p--        }            // 执行到这一行 说明 当前项cur 大于索引p这一项        // 则将当前项插入到后面        A[p + 1] = cur      }    }        const A5 = [2, 4, 13, 6, 3]    insertC(A5)    console.log(A5) // [ 2, 3, 4, 6, 13 ]复制代码

快速排序

思想:

  1. 在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素;
  2. 将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边
  3. 对左右两个分区重复以上步骤直到所有元素都是有序的
var arr = [29, 10, 34, 40, 18];    function qu(ary) {        if (ary.length <= 1) return ary;        var centIndex = Math.floor(ary.length / 2);        var left = [];        var right = [];        var centNum = ary.splice(centIndex, 1)[0];        for(var i = 0; i< ary.length; i++){            if(ary[i] < centNum) {                left.push(ary[i]);            }else {                right.push(ary[i]);            }        }        return qu(left).concat(centNum, qu(right));    }    console.log(qu(arr));// [10, 18, 29, 34, 40]复制代码

选择排序

思想:

  1. 拿出用数组第一项与数组的第二次开始一次比较,将最小的那一项的索引值[min]保存,然后再将数组的第一项索引为[0]与这个最小值兑换位置。(第一次循环找出数组中最小的放在第一位)
  2. 让后再拿出数组第二项,与数组的第三项开始找出数组中第二小的值的索引[min],然后与数组中第二项索引为[1]的互换位置。
  3. ......
var arr = [3, 2, 4, 7, 1, 5, 9, 6, 8];    var min;    for (var i = 0; i < arr.length - 2; ++i) {        var temp = arr[i];        min = i;        for (var j = i + 1; j < arr.length - 1; ++j) {            if (arr[j] < arr[min]) {                min = j            }        }        arr[i] = arr[min];        arr[min] = temp;    }    console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]复制代码

希尔排序

希尔排序: 他是首先比较最远的元素而非相邻的元素,让元素尽快回到正确的位置通过定义一个间隔序列来表示在排序过程中进行比较的元素间隔。公开的间隔序列为 701, 301, 132, 57, 23, 10, 4, 1

var arr = [3, 2, 4, 7, 1, 5, 9, 6, 8];var gops = [5, 3, 1];for(var g=0; g
=gops[g] && arr[j-gops[g]]>temp;j-=gops[g]){ arr[j] = arr[j-gops[g]]; } arr[j] = temp }}console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]复制代码

转载于:https://juejin.im/post/5c78d27c518825518b7267ec

你可能感兴趣的文章
nginx web服务理论与实战
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
网易音乐版轮播-react组件版本
查看>>
ES6 - 函数与剩余运算符
查看>>
你对position了解有多深?看完这2道有意思的题你就有底了...
查看>>
WebSocket跨域问题解决
查看>>
ECMAScript6基本介绍
查看>>
世界经济论坛发布关于区块链网络安全的报告
查看>>
巨杉数据库加入CNCF云原生应用计算基金会,共建开源技术生态
查看>>
Ubuntu 16.04安装Nginx
查看>>
从 JS 编译原理到作用域(链)及闭包
查看>>
flutter 教程(一)flutter介绍
查看>>
CSS面试题目及答案
查看>>
【从蛋壳到满天飞】JS 数据结构解析和算法实现-Arrays(数组)
查看>>
每周记录(三)
查看>>
Spring自定义注解从入门到精通
查看>>
笔记本触摸板滑动事件导致连滑的解决方式
查看>>
Android推荐常用的31个库
查看>>
Runtime 学习:消息传递
查看>>
你了解BFC吗?
查看>>