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 相关文章推荐
Dom与浏览器兼容性说明
Oct 25 Javascript
js 对小数加法精度处理示例说明
Dec 27 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
JavaScript 学习笔记之变量及其作用域
Jan 14 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
Nov 21 Javascript
探究JavaScript中的五种事件处理程序方式
Dec 07 Javascript
Angular4学习笔记之新建项目的方法
Jul 18 Javascript
探索webpack模块及webpack3新特性
Sep 18 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 Javascript
vue集成百度UEditor富文本编辑器使用教程
Sep 21 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
JavaScript实现简单图片切换
Apr 29 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
第三节 定义一个类 [3]
2006/10/09 PHP
PHP伪静态写法附代码
2008/06/20 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
Python中请不要再用re.compile了
2019/06/30 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
Python中bisect的使用方法
2019/12/31 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
银行出纳岗位职责
2013/11/25 职场文书
校运会口号
2014/06/18 职场文书
入党积极分子党小组意见
2015/06/02 职场文书