排序算法速度测试(插入排序、二分法插入、选择排序、快速排序、堆排序)js实现...
公共函数库(用于取出随机排列的数字)
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实现...相关推荐
- JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)
JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...
- 经典排序算法(一) —— Selection Sort 选择排序
经典排序算法(一) -- Selection Sort 选择排序 文章目录 经典排序算法(一) -- Selection Sort 选择排序 简介 排序过程 实现 复杂度 简介 选择排序是一种简单直观 ...
- 排序算法系列之(一)——选择排序清新脱俗的一面
· 前言 大家还记得我几个月前挖的一个大坑吗?非要自不量力的来讲讲排序家族的故事,这不是!今天我回来继续填这个坑,搞不好会把自己埋在这了/(ㄒoㄒ)/~~ 话说关于这些排序算法的总结网上各种版本的都有 ...
- 排序算法理解总结篇——冒泡排序、选择排序、插入排序、希尔排序、归并排序、堆排序、计数排序、基数排序、桶排序
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 排序算法,最全的10大排序算法详解(Sort Algorithm)
文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...
- datatable的数据进行组内排序_排序算法学习分享(四)希尔排序
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...
- 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)
快速导航: 1. 稳定性 2 . 插入排序 3. 希尔排序 4. 选择排序 5. 堆排序 6 冒泡排序 1. 稳定性 两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法 ...
- 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...
- python八大排序算法 间书_Python 八大排序算法速度比较
这篇文章并不是介绍排序算法原理的,纯粹是想比较一下各种排序算法在真实场景下的运行速度. 算法由 Python 实现,用到了一些语法糖,可能会和其他语言有些区别,仅当参考就好. 测试的数据是自动生成的, ...
最新文章
- 树上动态插点 ---- F. Imbalance Value of a Tree(树上动态插点 + 并查集)
- 5G与数据中心是新基建“耗电双雄”?事情不能这么看……
- 【David Silver强化学习公开课】-7:Policy Gradient
- java读取文件指定位置_Java读取指定路径下的文件列表
- IIS日志作用与分析
- P5904-[POI2014]HOT-Hotels加强版【长链剖分,dp】
- LSGO软件技术团队2015~2016学年第三周(0914~0920)总结
- 147_Power BI Report Server demo演示
- shell-一些有趣的使用
- 学习 Bootstrap 5 之 Sizing 和 Spacing
- php源码网站安装教程,php源码安装教程(php源码网站搭建方法和过程)
- linux用迅雷下载软件,wine 迅雷下载安装(wine 迅雷极速版)
- 大学生体育课期末大作业
- 专业级游戏测试书上架:精通游戏测试(第3版)
- 远程电脑不能复制粘贴
- GCC 预处理的宏 (predefined macros)
- 这就是iPhone 6的屏幕?
- 首届“发现杯”软件设计大奖赛启动
- Error connecting to the target: (Error -6305) PRSC module failed to write to to a register
- 梯度下降---偏导数及其几何意义
热门文章
- 高速计算机的应用领域是什么,计算机的应用领域
- dch中mysql作用_解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- arraylist 线程安全_Java集合---ArrayList的实现原理
- hadoop合并日志_Hadoop深入学习:HDFS主要流程——SNN合并fsimage和编辑日志
- go语言项目实战1:-正则表达式,文件读取的综合使用
- kettle安装,启动spoon之后一闪就没了问题
- php分页类怎么使用,PHP实现的分页类定义与用法示例
- C#之生成树形菜单数据
- Weex组件库-Dialog
- Android总结篇系列:Activity中几个主要函数详解