高级排序算法总结

  1. 希尔排序

        function shellsort(array, gaps) {for (var g = 0; g < gaps.length; g++) {for (var i = gaps[g]; i < array.length; i++) {var temp = array[i];for (var j = i; (j >= gaps[g]) && (temp < array[j-gaps[g]]);j -= gaps[g]) {array[j] = array[j - gaps[g]];}array[j] = temp;}console.log(array);}}
    间隔序列 gaps可以动态定义,不过对于大部分的实际应用场景,算法要用到的间隔序列可以提前定义好,有一些公开定义的间隔序列,使用它们会得到不同的结果。例如Marcin Ciura 在2001 的论文“Best Increments for theAverage Case of Shell Sort”中的间隔序列[701, 301, 132, 57, 23, 10, 4, 1],下一节将介绍具有动态间隔序列的希尔排序.
  2. 动态间隔序列希尔排序

        function dynOrdShellsort(array) {var N = array.length;var h = 1;while (h < N/3) {h = 3 * h + 1;}while (h >= 1) {for (var i = h; i < N; i++) {for (var j = i; j >= h && array[j] < array[j-h]; j -= h) {// swap(array, j, j-h);[array[j], array[j-h]] = [array[j-h], array[j]];}}h = (h-1)/3;}}
    在《算法(第 4 版)》(人邮版)的合著者 Robert Sedgewick 定义了一个   shellsort() 函数,在这个函数中可以通过一个公式来对希尔排序用到的间隔序列进行动态计算。Sedgewick 的算法是通过上面的代码片段来决定初始间隔值的,并添加到外层 for 循环.
  3. 归并排序

        let mergeSort = (function () {function mergeSort(arr) {if (arr.length < 2) {return;}var step = 1;var left, right;while (step < arr.length) {left = 0;right = step;while (right + step <= arr.length) {mergeArrays(arr, left, left+step, right, right+step);left = right + step;right = left + step;}if (right < arr.length) {mergeArrays(arr, left, left+step, right, arr.length);}step *= 2;}}function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {var rightArr = new Array(stopRight - startRight + 1);var leftArr = new Array(stopLeft - startLeft + 1);k = startRight;for (var i = 0; i < (rightArr.length-1); ++i) {rightArr[i] = arr[k];++k;}k = startLeft;for (var i = 0; i < (leftArr.length-1); ++i) {leftArr[i] = arr[k];++k;}rightArr[rightArr.length-1] = Infinity; // 哨兵值leftArr[leftArr.length-1] = Infinity; // 哨兵值var m = 0;var n = 0;for (var k = startLeft; k < stopRight; ++k) {if (leftArr[m] <= rightArr[n]) {arr[k] = leftArr[m];m++;}else {arr[k] = rightArr[n];n++;}}// console.log("left array - ", leftArr);// console.log("right array - ", rightArr);}return mergeSort;})()
  4. 快速排序

        function qSort(arr){if (arr.length == 0) {return [];}var left = [];var right = [];var pivot = arr[0];for (var i = 1; i < arr.length; i++) {if (arr[i] < pivot) {left.push(arr[i]);} else {right.push(arr[i]);}}return qSort(left).concat(pivot, qSort(right));}

javascript数据结构与算法 --- 高级排序算法相关推荐

  1. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  2. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  3. 数据结构Java版之排序算法(二)

    排序按时间复杂度和空间复杂度可分为 低级排序 和 高级排序 算法两种.下面将对排序算法进行讲解,以及样例的展示. 低级排序:冒泡排序.选择排序.插入排序. 冒泡排序: 核心思想,小的数往前移.假设最小 ...

  4. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

  5. 数据结构与算法之排序算法

    数据结构与算法之排序算法 排序算法的介绍 ​ 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排序的过程. 排序的分类 1)内部排序:指将需要处理的数据都加载到内部 ...

  6. JavaScript:实现AlphaNumericalSort字母数字排序算法(附完整源码)

    JavaScript:实现AlphaNumericalSort字母数字排序算法 /*In computing, natural sort order (or natural sorting) is t ...

  7. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  8. python结构排序_Python数据结构(七)排序算法 上

    Python数据结构(七)排序算法 上 上回: 本文的重点不是代码,而是带着大家分析每一个排序算法背后的思想以及使用到的数据结构.很多时候不是我们想不出算法该如何去写,而是题目并没有指定特定的数据结构 ...

  9. 前端算法-基本排序算法比较

    基本排序算法 这里主要介绍的基本排序算法主要包括: 冒泡排序,选择排序,插入排序,之后的文章会介绍希尔排序,快速排序等高级排序算法, 文章后面会对这几个算法进行性能比较. 基本排序算法的核心思想是对一 ...

最新文章

  1. pygame是python的一个库吗,python学习pygame,,基本库导入impor
  2. PySpider HTTP 599: SSL certificate problem错误的解决方法
  3. java jdk安装_Java从入门到入土第一课—JDK安装及环境配置
  4. windows2003 DNS服务器配置
  5. 千元显卡玩转百亿大模型,清华推出工具包BMInf让模型推理轻而易举
  6. Hadoop集群启动、初体验
  7. webpack4.0各个击破(6)—— Loader篇
  8. Android屏幕适配的两种方式
  9. svn迁移到git_SVN到GIT的迁移完整教程
  10. 2天玩转单反相机(第二讲)
  11. Android 退出登陆后,清空之前所有的activity,进入登陆主界面
  12. 语言-英语-美国英语:美国英语
  13. 维修电工技师技能实训考核装置QY-W05
  14. NRF24L01无线通信模块使用示例和调试心得总结
  15. MATLAB中拟合线性方程(最小二乘法)
  16. CE修改植物大战僵尸-阳光基址(小宇特详解)
  17. 根据经纬度定位百度地图(带图片的)
  18. Eclipse 解决项目中中文注释乱码问题
  19. linux superblock 时间,e2fsck: Bad magic number in super-block_Linux
  20. APP超级签名分发系统 企业签名免签封装微信多开自助分发多合一系统

热门文章

  1. 学习戴铭博文《从 ReactiveCocoa 中能学到什么?不用此库也能学以致用》的总结...
  2. window下Jekyll+github搭建自己的博客
  3. Linux之crontab命令
  4. php缓存静态化设计,PHP使用OB缓存实现静态化功能示例
  5. 获取POM.XML依赖的JAR包
  6. (转)json+flexgrid+jbox组合运用页面刷新jsp
  7. Canvas -画图 关键字
  8. Cookie和Session专题
  9. 创新也要懂“规矩” 协同软件将走向何方
  10. vue自定义组件递归实现树状_一道价值25k的腾讯递归组件面试题(Vue3 + TS 实现)...