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 相关文章推荐
用javascript做拖动布局的思路
May 31 Javascript
将jQuery应用于login页面的问题及解决
Oct 17 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
JSON.parse()和JSON.stringify()使用介绍
Jun 20 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
JavaScript中的迭代器和生成器详解
Oct 29 Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
详解jQuery中的easyui
Sep 02 jQuery
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
jquery更改元素属性attr()方法操作示例
May 22 jQuery
JavaScript实现alert弹框效果
Nov 19 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中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
详解Python中的正则表达式的用法
2015/04/09 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
超实用的 30 段 Python 案例
2019/10/10 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
python操作redis数据库的三种方法
2020/09/10 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
白色公司:The White Company
2017/10/11 全球购物
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
Servlet如何得到服务器的信息
2015/12/22 面试题
好的演讲稿开场白
2013/12/30 职场文书
毕业生自荐书
2014/02/03 职场文书
婚礼主持词开场白
2014/03/13 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
Linux中如何安装并部署Redis
2022/04/18 Servers