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 相关文章推荐
ajax异步刷新实现更新数据库
Dec 03 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
纯javascript实现四方向文本无缝滚动效果
Jun 16 Javascript
JS实现异步上传压缩图片
Apr 22 Javascript
详解JS中的柯里化(currying)
Aug 17 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
js实现黑白div块画空心的图形
Dec 13 Javascript
vue中引入mxGraph的步骤详解
May 17 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
Mar 17 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 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的大小写敏感问题整理
2011/12/29 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
详解Vue方法与事件
2017/03/09 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python实现图书管理系统
2018/03/12 Python
通过实例了解python property属性
2019/11/01 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
python中uuid模块实例浅析
2020/12/29 Python
《三个小伙伴》教学反思
2014/04/11 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
企业口号大全
2014/06/12 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
python模板入门教程之flask Jinja
2022/04/11 Python