js的各种排序算法实现(总结)


Posted in Javascript onJuly 23, 2016

如下所示:

// ---------- 一些排序算法
var Sort = {}
Sort.prototype = {
   // 利用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 tempi = i; // 记录开始位置 
       var tempj = 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(tempi == i){ 
         Sort(++i, tempj); 
         return ; 
       }
       // 最后一个空位留给 key 
       array[i] = key; 
       // 递归 
       Sort(tempi, i); 
       Sort(j, tempj); 
     } 
     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, temp, key, len = array.length;
     for(; i < len; i++){ 
       temp = 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 tempArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1];  
     // reverse() 在维基上看到这个最优的步长 较小数组 
     var tempArr = [1031612713, 217378076, 45806244, 9651787, 2034035, 428481, 90358, 19001, 4025, 836, 182, 34, 9, 1] 
       //针对大数组的步长选择 
     var i = 0; 
     var tempArrtempArrLength = tempArr.length; 
     var len = array.length; 
     var len2 = parseInt(len/2); 
      
     for(;i < tempArrLength; i++){ 
       if(tempArr[i] > len2){ 
         continue; 
       }
       tempSort(tempArr[i]); 
     }
     // 排序一个步长 
     function tempSort(temp){ 
       //console.log(temp) 使用的步长统计 
       var i = 0, j = 0, f, tem, key; 
       var tempLen = len%temp > 0 ? parseInt(len/temp) + 1 : len/temp;  
       
       for(;i < temp; i++){// 依次循环列 
  
         for(j=1;/*j < tempLen && */temp * j + i < len; j++){
            //依次循环每列的每行 
           tem = f = temp * j + i; 
           key = array[f]; 
  
           while((tem-=temp) >= 0){ 
              // 依次向上查找
             if(array[tem] > key){
               array[tem+temp] = array[tem];
             }else{
               break;
             }
           }
           array[tem + temp ] = key;
         }
       }
     }
     return array;
   }
}

以上这篇js的各种排序算法实现(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype 学习 工具函数学习($方法)
Jul 12 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
Dec 19 Javascript
IE浏览器中图片onload事件无效的解决方法
Apr 29 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
VUEJS实战之构建基础并渲染出列表(1)
Jun 13 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
Node.js文件编码格式的转换的方法
Apr 27 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
vue+node实现图片上传及预览的示例方法
Nov 22 Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 #Javascript
javaScript事件机制兼容【详细整理】
Jul 23 #Javascript
基于bootstrap实现广告轮播带图片和文字效果
Jul 22 #Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
Jul 22 #Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 #Javascript
JavaScript中的Reflect对象详解(ES6新特性)
Jul 22 #Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
Jul 22 #Javascript
You might like
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
用Python创建声明性迷你语言的教程
2015/04/13 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
2014信息公开实施方案
2014/02/22 职场文书
付款委托书范本
2014/04/04 职场文书
2014年城管工作总结
2014/11/20 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP