JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)


Posted in Javascript onNovember 24, 2015

本文实例总结了JS数组排序技巧。分享给大家供大家参考,具体如下:

① 冒泡排序

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;
}

② js 利用sort进行排序

systemSort:function(array)
{ return array.sort(function(a, b)
{ return a - b; }); 
}

③ 快速排序

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; 
}

④希尔排序

//Jun.array.shellSort(Jun.array.df(10000)); 
shellSort:function(array){
// 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;
}

⑤ 插入排序

insertSort:function(array){
/ /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; 
}

附:js中数组(Array)的排序(sort)注意事项

var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组
alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序
alert(arrDemo);//10,50,51,100
arrDemo.sort(function(a,b){return a<b?1:-1});//从大到小排序
alert(arrDemo);//100,51,50,10

结论:

1.数组调用sort方法后,会影响本身(而非生成新数组)
2.sort()方法默认是按字符来排序的,所以在对数字型数组排序时,不可想当然的以为会按数字大小排序!
3.要改变默认的sort行为(即按字符排序),可以自行指定排序规则函数(如本例所示)

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js字符编码函数区别分析
Jun 05 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 Javascript
JavaScript判断按钮被点击的方法
Dec 13 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
微信小程序中实现一对多发消息详解及实例代码
Feb 14 Javascript
javascript 开发之网页兼容各种浏览器
Sep 28 Javascript
使用typescript开发angular模块并发布npm包
Apr 19 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
Jul 10 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 Javascript
解决axios post 后端无法接收数据的问题
Oct 29 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
Dec 21 Javascript
JS获取数组最大值、最小值及长度的方法
Nov 24 #Javascript
基于jquery实现日历签到功能
Sep 11 #Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 #Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 #Javascript
JS实现图片高亮展示效果实例
Nov 24 #Javascript
JS截取字符串实例详解
Nov 24 #Javascript
超漂亮的jQuery图片轮播特效
Nov 24 #Javascript
You might like
论坛头像随机变换代码
2006/10/09 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
Prototype Class对象学习
2009/07/19 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
easyui validatebox验证
2016/04/29 Javascript
loading动画特效小结
2017/01/22 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
python冒泡排序简单实现方法
2015/07/09 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
django修改models重建数据库的操作
2020/03/31 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
Python创建自己的加密货币的示例
2021/03/01 Python
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL