温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript中有哪些排序算法

发布时间:2021-08-12 14:53:06 阅读:96 作者:Leah 栏目:web开发
前端开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这期内容当中小编将会给大家带来有关JavaScript中有哪些排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

说明

·  每个浏览器测试得出的数据会不一样。比如我用chrome 测试 一般快速排序都会最快,IE 则根据数组长度有可能希尔最快。

·  不要用太大数据去测试冒泡排序(浏览器崩溃了我不管)

个人理解

·  冒泡排序:最简单,也最慢,貌似长度小于7***

·  插入排序: 比冒泡快,比快速排序和希尔排序慢,较小数据有优势

·  快速排序:这是一个非常快的排序方式,V8的sort方法就使用快速排序和插入排序的结合

·  希尔排序:在非chrome下数组长度小于1000,希尔排序比快速更快

·  系统方法:在forfox下系统的这个方法非常快

 // ---------- 一些排序算法      // js 利用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 = [175070130113257231041];   // reverse() 在维基上看到这个***的步长 较小数组          //var tempArr = [103161271321737807645806244,   96517872034035428481903581900140258361823491]  //针对大数组的步长选择          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;                } 

上述就是小编为大家分享的JavaScript中有哪些排序算法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×