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 相关文章推荐
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
javascript学习之闭包分析
Dec 02 Javascript
简单实用的全选反选按钮例子
Oct 18 Javascript
js导出txt示例代码
Jan 14 Javascript
JavaScript 控制字体大小设置的方法
Nov 23 Javascript
js实现小窗口拖拽效果
Dec 03 Javascript
jQuery选择器实例应用
Jan 05 Javascript
浅谈Angular.js中使用$watch监听模型变化
Jan 10 Javascript
详解Web使用webpack构建前端项目
Sep 23 Javascript
vue2实现数据请求显示loading图
Nov 28 Javascript
vue裁切预览组件功能的实现步骤
May 04 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
Nov 05 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备份MYSQL数据的多种方法
2014/01/15 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
jQuery双向列表选择器select版
2016/11/01 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
微信小程序日历效果
2018/12/29 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python检测网站链接是否已存在
2016/04/07 Python
python如何实现反向迭代
2018/03/20 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python找出完数的方法
2018/11/12 Python
Python中的整除和取模实例
2020/06/03 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
python opencv肤色检测的实现示例
2020/12/21 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
高一学生评语大全
2014/04/25 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
2014年度培训工作总结
2014/11/27 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
工作年限证明范本
2015/06/15 职场文书
物业公司管理制度
2015/08/05 职场文书
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript