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 相关文章推荐
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
移动设备web开发首选框架:zeptojs介绍
Jan 29 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
Feb 13 Javascript
JavaScript手机振动API
Jun 11 Javascript
深入理解JavaScript中Ajax
Aug 02 Javascript
解析AngularJS中get请求URL出现的跨域问题
Dec 01 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
Jul 30 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
详解Vue Cli浏览器兼容性实践
Jun 08 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
我的五年职业生涯规划
2014/01/23 职场文书
代办委托书怎样写
2014/04/08 职场文书
实习单位评语
2014/04/26 职场文书
大学新学期计划书
2014/04/28 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
企业趣味活动方案
2014/08/21 职场文书
Python WSGI 规范简介
2021/04/11 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js