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更优雅的兼容
Aug 12 Javascript
ajax请求get与post的区别总结
Nov 04 Javascript
setTimeout和setInterval的深入理解
Nov 08 Javascript
js对象转json数组的简单实现案例
Feb 28 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
May 27 Javascript
js实现页面a向页面b传参的方法
May 29 Javascript
JS利用cookies设置每隔24小时弹出框
Apr 20 Javascript
JS实现多张图片预览同步上传功能
Jun 23 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
微信小程序如何使用云开发
May 17 Javascript
解决vue初始化项目一直停在downloading template的问题
Nov 09 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中检查文件或目录是否存在的代码小结
2012/10/22 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
webpack之devtool详解
2018/02/10 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Django如何将URL映射到视图
2019/07/29 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
Python Map 函数的使用
2020/08/28 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
群众路线批评与自我批评
2014/02/06 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年团总支工作总结
2014/11/21 职场文书
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技
app场景下uniapp的扫码记录
2022/07/23 Java/Android