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 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
建议大家看下JavaScript重要知识更新
Jul 08 Javascript
JavaScript入门之事件、cookie、定时等
Oct 21 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
Aug 15 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
Jan 11 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
Vue性能优化的方法
Jul 30 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
js实现时间日期校验
2020/05/26 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
Python求解正态分布置信区间教程
2019/11/20 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python各种扩展名区别点整理
2020/02/27 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
介绍一下#error预处理
2015/09/25 面试题
.NET现在共支持多少种语言
2014/02/26 面试题
阳光体育活动实施方案
2014/05/25 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
采购部长岗位职责
2014/06/13 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
展览会邀请函
2015/02/02 职场文书
大学军训口号大全
2015/12/24 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL