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 相关文章推荐
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
JS对象转换为Jquery对象实现代码
Dec 29 Javascript
js实现ArrayList功能附实例代码
Oct 29 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
新闻上下滚动jquery 超简洁(必看篇)
Jan 21 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
May 24 Javascript
vue生成随机验证码的示例代码
Sep 29 Javascript
简易Vue评论框架的实现(父组件的实现)
Jan 08 Javascript
微信小程序商品详情页底部弹出框
Nov 22 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访问查询mysql数据的三种方法
2006/10/09 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
JavaScript库 开发规则
2009/01/31 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
python数据分析:关键字提取方式
2020/02/24 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
Java servlet面试题
2012/03/04 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
本科毕业生求职信
2014/06/15 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
班主任2015新年寄语
2014/12/08 职场文书
检讨书模板
2015/01/29 职场文书
员工聘用合同范本
2015/09/21 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js