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 相关文章推荐
Jquery:ajax实现翻页无刷新功能代码
Aug 05 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
Mar 15 Javascript
微信小程序rich-text富文本用法实例分析
May 20 Javascript
vue Element左侧无限级菜单实现
Jun 10 Javascript
JS代码简洁方式之函数方法详解
Jul 28 Javascript
vue select 获取value和lable操作
Aug 28 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
php 时间计算问题小结
2009/01/04 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
Python运算符重载用法实例
2015/05/28 Python
Python过滤列表用法实例分析
2016/04/29 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Django中使用Celery的教程详解
2018/08/24 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
python实现石头剪刀布程序
2021/01/20 Python
Python Flask框架扩展操作示例
2019/05/03 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
电大毕业生自我鉴定
2014/04/10 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
如何利用pygame实现打飞机小游戏
2021/05/30 Python
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS