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实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
使用正则表达式的格式化与高亮显示json字符串
Dec 03 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
Jul 13 Javascript
js实现的tab标签切换效果代码分享
Aug 25 Javascript
JavaScript中数组添加值和访问值常见问题
Feb 06 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
May 30 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
微信小程序Getuserinfo解决方案图解
Aug 24 Javascript
sortable+element 实现表格行拖拽的方法示例
Jun 07 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采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
jQuery.extend 函数详解
2012/02/03 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
秋天的雨教学反思
2014/04/27 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
上诉状格式
2015/05/23 职场文书
离婚案件原告代理词
2015/05/23 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
python基础之文件操作
2021/10/24 Python
spring 项目实现限流方法示例
2022/07/15 Java/Android