说明

  • 写这个主要是为了锻炼自己,并无实际意义。
  • 每个浏览器测试得出的数据会不一样。比如我用chrome 测试 一般快速排序都会最快,IE 则根据数组长度有可能希尔最快。
  • 不要用太大数据去测试冒泡排序(浏览器崩溃了我不管)
  • 如果有兴趣可以 在线排序动画  下载测试页面

个人理解

  • 冒泡排序:最简单,也最慢,貌似长度小于7最优
  • 插入排序: 比冒泡快,比快速排序和希尔排序慢,较小数据有优势
  • 快速排序:这是一个非常快的排序方式,V8的sort方法就使用快速排序和插入排序的结合
  • 希尔排序:在chrome下数组长度小于1000,希尔排序比快速更快
  • 系统方法:在forfox下系统的这个方法非常快
// ---------- 一些排序算法
// js 利用sort进行排序
systemSort: function(array) {return array.sort(function(a, b) {return a - b;});
},
// 冒泡排序
bubbleSort: function(array) {var i = 0,len = array.length,j, d;for (; i < len; i++) {for (j = 0; j < len; j++) {if (array[i] < array[j]) {d = array[j];array[j] = array[i];array[i] = d;}}}return array;
},
// 快速排序
quickSort: function(array) {//var array = [8,4,6,2,7,9,3,5,74,5];//var array = [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];var i = 0;var j = array.length - 1;var Sort = function(i, j) {// 结束条件if (i == j) {return};var key = array[i];var stepi = i; // 记录开始位置var stepj = j; // 记录结束位置while (j > i) {// j <<-------------- 向前查找if (array[j] >= key) {j--;} else {array[i] = array[j]//i++ ------------>>向后查找while (j > ++i) {if (array[i] > key) {array[j] = array[i];break;}}}}// 如果第一个取出的 key 是最小的数if (stepi == i) {Sort(++i, stepj);return;}// 最后一个空位留给 keyarray[i] = key;// 递归
        Sort(stepi, i);Sort(j, stepj);}Sort(i, j);return array;
},// 插入排序
insertSort: function(array) {// http://baike.baidu.com/image/d57e99942da24e5dd21b7080// http://baike.baidu.com/view/396887.htm//var array = [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];var i = 1,j, step, key, len = array.length;for (; i < len; i++) {step = j = i;key = array[j];while (--j > -1) {if (array[j] > key) {array[j + 1] = array[j];} else {break;}}array[j + 1] = key;}return array;
},// 希尔排序
//Jun.array.shellSort(Jun.array.df(10000));
shellSort: function(array) {// http://zh.wikipedia.org/zh/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F// var array = [13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10];var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; // reverse() 在维基上看到这个最优的步长 较小数组//var stepArr = [1031612713, 217378076, 45806244, 9651787, 2034035, 428481, 90358, 19001, 4025, 836, 182, 34, 9, 1]//针对大数组的步长选择var i = 0;var stepArrLength = stepArr.length;var len = array.length;var len2 = parseInt(len / 2);for (; i < stepArrLength; i++) {if (stepArr[i] > len2) {continue;}stepSort(stepArr[i]);}// 排序一个步长function stepSort(step) {//console.log(step) 使用的步长统计var i = 0,j = 0,f, tem, key;var stepLen = len % step > 0 ? parseInt(len / step) + 1 : len / step;for (; i < step; i++) { // 依次循环列for (j = 1;/*j < stepLen && */step * j + i < len; j++) { //依次循环每列的每行tem = f = step * j + i;key = array[f];while ((tem -= step) >= 0) { // 依次向上查找if (array[tem] > key) {array[tem + step] = array[tem];} else {break;}}array[tem + step] = key;}}}return array;}

转载于:https://www.cnblogs.com/idche/archive/2011/02/16/1956397.html

JavaScript版几种常见排序算法相关推荐

  1. Java几种常见排序算法与代码实现

    前言: 排序算法也算是每年校招.春招.社招都会问到的问题,虽然每次复习了就忘,但是也可以隔一段时间又拿出来看看. 其中,排序方式指,内部还是外部排序.只需要内部内存就可以的称为内部排序,数据量太大需要 ...

  2. 八种常见排序算法细讲

    目录 常见的八种排序 直接插入排序 希尔排序 直接选择排序 堆排序 冒泡排序 快速排序 hoare版本 挖坑法 前后指针版 快速排序代码 归并排序 计数排序 常见的八种排序 直接插入排序 ⾸先,我们将 ...

  3. php 各种排序算法,PHP四种常见排序算法

    一.冒泡排序: 冒泡排序可以说是最常见,也是最简单,最经典的排序算法了. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换 ...

  4. 利用Python实现几种常见排序算法

    一.排序算法概览 插入排序:直接插入排序,二分法插入排序 选择排序:直接选择排序,堆排序 交换排序:冒泡排序,快速排序 归并排序 二.代码实现 1.直接插入排序 最简单直接的一种方式,序列在排序中可分 ...

  5. 四种常见排序算法的对比和总结 插入排序、归并排序、快速排序、堆排序

    目录 一.排序算法的时间复杂度 二.排序算法是否是原地排序 三.排序算法的额外空间 四.排序算法的稳定性 Stable 五.总结 这里我们要总结的排序算法主要有4个,分别是插入排序Insertion ...

  6. php 版本排序,四种常见排序算法--PHP版本

    1.冒泡排序法 /** * 冒泡排序 * des 对一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面. */ $array = [2,5,1,3,7,4]; $result = bu ...

  7. 【知了堂学习笔记】java 编写几种常见排序算法3

    排序的分类: 1.希尔排序 希尔排序是快速插入排序的改进版,希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰 ...

  8. 别说我不懂排序!几种常见排序算法(一)

    part1:冒泡排序 冒泡排序的核心:一步一步交换相邻位置的数据! 代码示例 for 循环实现. def bubble_sort1(arr):# 交换的细节def swap(i,j):arr[i],a ...

  9. c语言程序排序的原理,几种常见排序算法原理C语言实现

    使用WatiN进行UI自动化测试 Watin是一个UI自动化测试工具,支持ie/firefox,官方网站:http://watin.org/. 主要有以下特点: 支持主要的html元素,见:http: ...

最新文章

  1. java集合总结_Java中集合总结
  2. Gartner2018新兴技术成熟度曲线:人机界线日益模糊!
  3. ASP.NET MVC2 Web项目中公用类库的问题
  4. python 排列组合之itertools
  5. python生成随机密码
  6. 试用c51语言采样连续5次异常_学会这些自闭症儿童语言训练技巧,孩子开口说话不再困难...
  7. 关于c++跟java区别的几个总结
  8. arduino char*转string_Java 中 String 类的常用方法汇总
  9. SpringCloud的Archaius - 动态管理属性配置
  10. java合同到期提醒_合同到期提醒,你会操作吗?
  11. 维、哈、柯文字符代码及键盘标准
  12. 记事本html特效,很漂亮的网页飘落特效代码
  13. 智齿科技获投B轮融资5000万人民币
  14. 重新启动计算机以关闭用户账户控制,win10如何彻底关闭用户帐户控制?
  15. 从头到尾彻底解析Hash 表算法
  16. 关于contiki中的Ctimer和Etimer
  17. 《 2021大学生就业分析报告 》
  18. 保险入门,我不推荐买保险
  19. jenkins下载与简单使用
  20. 利用无效字节码指令引发逆向工具崩溃(二)

热门文章

  1. JZOJ 4932. 【NOIP2017提高组模拟12.24】B
  2. php 批量删除cookie,php批量删除cookie的简单实现方法
  3. diskgenius linux版_纯净版Windows10系统安装详细教程
  4. mtk处理器和骁龙对比_下一代手机处理器谁主沉浮
  5. 科学人格和科学能力的培养
  6. CVPR 2018 目标跟踪相关论文
  7. numpy之reshape()
  8. mysql8.0最低需要多少内存_MySQL8.0内存相关参数介绍
  9. python生成器yield_python 生成器yield的总结
  10. python降维效果图_python实现拉普拉斯特征图降维示例