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 getElementsByTagName
Jan 31 Javascript
javascript中call和apply方法浅谈
Sep 27 Javascript
JSP防止网页刷新重复提交数据的几种方法
Nov 19 Javascript
简单理解js的prototype属性及使用
Dec 07 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 jQuery
Moment.js实现多个同时倒计时
Aug 26 Javascript
IDEA安装vue插件图文详解
Sep 26 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
JS继承实现方法及优缺点详解
Sep 02 Javascript
利用PHP实现递归删除链表元素的方法示例
Oct 23 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实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
Unix控制后台进程都有哪些进程
2016/09/22 面试题
创业计划书的写作技巧及要点
2014/01/31 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
MySQL约束超详解
2021/09/04 MySQL