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 实现的点击复制代码
Mar 24 Javascript
FireFox与IE 下js兼容触发click事件的代码
Nov 20 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
Feb 26 Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 Javascript
纯Javascript实现ping功能的方法
Mar 20 Javascript
详解JavaScript的表达式与运算符
Nov 30 Javascript
实例解析jQuery中如何取消后续执行内容
Dec 01 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
Jun 04 Javascript
weui框架实现上传、预览和删除图片功能代码
Aug 24 Javascript
Vue数字输入框组件示例代码详解
Jan 15 Javascript
浅谈vue.watch的触发条件是什么
Nov 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简单隔行变色功能实现代码
2016/07/09 PHP
php微信支付接口开发程序
2016/08/02 PHP
Yii2中datetime类的使用
2016/12/17 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
JS动画效果代码3
2008/04/03 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
js判断节假日实例代码
2017/12/27 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
怎么快速自学python
2020/06/22 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
高中的职业生涯规划书
2013/12/28 职场文书
法制宣传教育方案
2014/05/09 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
保护黄河倡议书
2014/05/16 职场文书
银行奉献演讲稿
2014/09/16 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
学生个人总结范文
2015/02/15 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS