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脚本
Dec 03 Javascript
基于jQuery的简单的列表导航菜单
Mar 02 Javascript
jQuery.event兼容各浏览器的event详细解析
Dec 18 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
canvas实现图像截取功能
Feb 06 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
Express使用html模板的详细代码
Sep 18 Javascript
react-redux中connect的装饰器用法@connect详解
Jan 13 Javascript
JS实现移动端在线签协议功能
Aug 22 Javascript
vue移动端使用canvas签名的实现
Jan 15 Javascript
vue判断按钮是否可以点击
Apr 09 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详细彻底学习Smarty
2008/03/27 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
js 编程笔记 无名函数
2011/06/28 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
详解webpack性能优化——DLL
2017/10/20 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python中pygame安装方法图文详解
2015/11/11 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
银行优秀员工事迹
2014/02/06 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
婚礼新人答谢词
2015/01/04 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL