公共函数库(用于取出随机排列的数字)

module.exports={randomIntegerArray:function(count){var originalArray=new Array;//原数组 //给原数组originalArray赋值 for (var i=0;i<count;i++){ originalArray[i]=i+1; } originalArray.sort(function(){ return 0.5 - Math.random(); }); return originalArray;}
}

排序算法

//插入排序 时间复杂度O(n^2)
function insertionSort(array){if(Object.prototype.toString.call(array).slice(8,-1)!='Array') {throw new Error('array is not a Array')return;};for (var i = 0,l=array.length; i < l; i++) {var insert=array[i];var j=i-1;while (j>=0&&array[j]>insert) {array[j+1]=array[j];j--;}array[j+1]=insert;}return array;
}
//二分法插入排序
function dichotomyInsertSort(array){if(Object.prototype.toString.call(array).slice(8,-1)!='Array'){throw new Error('array is not a Array')return;}for (var i = 0; i < array.length; i++) {var key=array[i],left=0,right=i-1;while(left<=right){var mid=parseInt((left+right)/2);if(key<array[mid]){right++;}else{left++;}}for (var j = i-1; j>=left; j--) {array[j+1]=array[j];}array[left]=key;}return array;
}//选择排序
function selectionSort(array){if(Object.prototype.toString.call(array).slice(8,-1)!='Array'){throw new Error('array is not a Array')return;}for (var i = 0; i < array.length-1; i++) {var min=array[i];for(var j=i+1;j<array.length;j++){if(min>array[j]){var temp=array[j];array[j]=min;min=temp;}}array[i]=min;}return array;
}
//快速排序 一
function quickSort(array,left,right){if(Object.prototype.toString.call(array).slice(8,-1)!='Array'){throw new Error('array is not a Array')return;}if(left>=right) return;var j=left-1,key=array[right],temp;for (var i = left; i <=right; i++) {if(array[i]<=key&&i!=j){j++;temp=array[j];array[j]=array[i];array[i]=temp;}}quickSort(array,left,j-1);quickSort(array,j+1,right);
}
//堆排序
/**01        23    4    5   67 8  9 10
*/
var heapSort =(function(){function heapAjust(array,len){var mid=Math.floor(len/2);for (var i = mid; i >=0; i--) {var l=2*i+1,r=2*i+2,largest=i;if(l<len&&array[l]>array[largest]) largest=l;if(r<len&&array[r]>array[largest]) largest=r;if(largest!=i){swap(array,i,largest)}}        }function swap(array,i,j){var temp=array[i];array[i]=array[j];array[j]=temp;}return function heap(array){if(Object.prototype.toString.call(array).slice(8,-1)!='Array'){console.error('array is not a Array');return;}var len=array.length;for (var i = 0; i < len; i++) {heapAjust(array,len-i);swap(array,0,len-1-i);}}
})()module.exports={insertionSort:insertionSort,dichotomyInsertSort:dichotomyInsertSort,selectionSort:selectionSort,quickSort:quickSort,heapSort:heapSort
}

测试用例

var common=require('./common.js');var sort=require('./sort.js')
var l=100000;
var a=common.randomIntegerArray(l),b;
var a1=common.randomIntegerArray(l),b1;
var a2=common.randomIntegerArray(l),b2;
var a3=common.randomIntegerArray(l),b3;
var a4=common.randomIntegerArray(l),b4;
/**************
*插入排序时间测试
***************/
console.time('insert');// console.log(a);b=sort.insertionSort(a);// console.log(b);
console.timeEnd('insert');/**************
*二分法插入排序时间测试
***************/
console.time('twoinsert');// console.log(a1);b1=sort.dichotomyInsertSort(a);
// console.log(b1);
console.timeEnd('twoinsert');/**************
*选择排序时间测试
***************/
console.time('selectionSort');// console.log(a2);b2=sort.selectionSort(a2);
// console.log(b2);
console.timeEnd('selectionSort');/**************
*快速排序时间测试一
***************/
console.time('quickSort1');
// console.log(a3);sort.quickSort(a3,0,a3.length-1);// console.log(a3);
console.timeEnd('quickSort1');/**************
*堆排序时间测试一
***************/
console.time('heapSort');
// console.log(a4);debugger;sort.heapSort(a4);
// console.log(a4);
console.timeEnd('heapSort');

实验结构
100000个随机数字的时候
insert: 7943ms
twoinsert: 96807ms
selectionSort: 21013ms
quickSort1: 56ms
heapSort: 16309ms

github源码位置:地址https://github.com/ddcouples/...

排序算法速度测试(插入排序、二分法插入、选择排序、快速排序、堆排序)js实现...相关推荐

  1. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  2. 经典排序算法(一) —— Selection Sort 选择排序

    经典排序算法(一) -- Selection Sort 选择排序 文章目录 经典排序算法(一) -- Selection Sort 选择排序 简介 排序过程 实现 复杂度 简介 选择排序是一种简单直观 ...

  3. 排序算法系列之(一)——选择排序清新脱俗的一面

    · 前言 大家还记得我几个月前挖的一个大坑吗?非要自不量力的来讲讲排序家族的故事,这不是!今天我回来继续填这个坑,搞不好会把自己埋在这了/(ㄒoㄒ)/~~ 话说关于这些排序算法的总结网上各种版本的都有 ...

  4. 排序算法理解总结篇——冒泡排序、选择排序、插入排序、希尔排序、归并排序、堆排序、计数排序、基数排序、桶排序

  5. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  6. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  7. datatable的数据进行组内排序_排序算法学习分享(四)希尔排序

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

  8. 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航: 1. 稳定性 2 . 插入排序 3. 希尔排序 4. 选择排序 5. 堆排序 6 冒泡排序 1. 稳定性 两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法 ...

  9. 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

    题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...

  10. python八大排序算法 间书_Python 八大排序算法速度比较

    这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...

最新文章

  1. 树上动态插点 ---- F. Imbalance Value of a Tree(树上动态插点 + 并查集)
  2. 5G与数据中心是新基建“耗电双雄”?事情不能这么看……
  3. 【David Silver强化学习公开课】-7:Policy Gradient
  4. java读取文件指定位置_Java读取指定路径下的文件列表
  5. IIS日志作用与分析
  6. P5904-[POI2014]HOT-Hotels加强版【长链剖分,dp】
  7. LSGO软件技术团队2015~2016学年第三周(0914~0920)总结
  8. 147_Power BI Report Server demo演示
  9. shell-一些有趣的使用
  10. 学习 Bootstrap 5 之 Sizing 和 Spacing
  11. php源码网站安装教程,php源码安装教程(php源码网站搭建方法和过程)
  12. linux用迅雷下载软件,wine 迅雷下载安装(wine 迅雷极速版)
  13. 大学生体育课期末大作业
  14. 专业级游戏测试书上架:精通游戏测试(第3版)
  15. 远程电脑不能复制粘贴
  16. GCC 预处理的宏 (predefined macros)
  17. 这就是iPhone 6的屏幕?
  18. 首届“发现杯”软件设计大奖赛启动
  19. Error connecting to the target: (Error -6305) PRSC module failed to write to to a register
  20. 梯度下降---偏导数及其几何意义

热门文章

  1. 高速计算机的应用领域是什么,计算机的应用领域
  2. dch中mysql作用_解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
  3. arraylist 线程安全_Java集合---ArrayList的实现原理
  4. hadoop合并日志_Hadoop深入学习:HDFS主要流程——SNN合并fsimage和编辑日志
  5. go语言项目实战1:-正则表达式,文件读取的综合使用
  6. kettle安装,启动spoon之后一闪就没了问题
  7. php分页类怎么使用,PHP实现的分页类定义与用法示例
  8. C#之生成树形菜单数据
  9. Weex组件库-Dialog
  10. Android总结篇系列:Activity中几个主要函数详解