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 03 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
jQuery实现垂直半透明手风琴特效代码分享
Aug 21 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 Javascript
jQuery手指滑动轮播效果
Dec 22 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
详解vue.js之props传递参数
Dec 12 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
Python中__call__用法实例
2014/08/29 Python
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
工作的心得体会
2013/12/31 职场文书
大学运动会通讯稿
2014/01/28 职场文书
陈欧广告词
2014/03/14 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
卖车协议书范文
2016/03/23 职场文书
详解Python requests模块
2021/06/21 Python
python可视化大屏库big_screen示例详解
2021/11/23 Python
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript