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 相关文章推荐
破除一些网站复制、右键限制
Nov 04 Javascript
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 Javascript
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
JavaScript中用getDate()方法返回指定日期的教程
Jun 09 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
Javascript基础知识盲点总结之函数
May 15 Javascript
JS控制TreeView的结点选择
Nov 11 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
js中的this的指向问题详解
Aug 29 Javascript
vue router 动态路由清除方式
May 25 Vue.js
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
php strcmp使用说明
2010/04/22 PHP
php自动加载机制的深入分析
2013/06/08 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
理解javascript正则表达式
2016/03/08 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
python中assert用法实例分析
2015/04/30 Python
python实现多线程的两种方式
2016/05/22 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
小学教师的个人自我鉴定
2013/10/26 职场文书
电子信息专业学生自荐信
2013/11/09 职场文书
珍惜水资源建议书
2014/03/12 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
2014年双拥工作总结
2014/11/21 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Vue图片裁剪组件实例代码
2021/07/02 Vue.js