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 相关文章推荐
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
jQuery中读取json文件示例代码
May 10 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
Sep 15 Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 Javascript
js实现显示当前状态的导航效果代码
Aug 28 Javascript
javascript 中的 delete及delete运算符
Nov 15 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
Dec 13 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
一个取得文件扩展名的函数
2006/10/09 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
nodeJS微信分享
2017/12/20 NodeJs
vue 自动化路由实现代码
2019/09/03 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
tensorflow 模型权重导出实例
2020/01/24 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
linux面试题参考答案(7)
2014/07/24 面试题
行政管理专业推荐信
2013/11/02 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
中英文自我评价语句
2013/12/20 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
Python 图片添加美颜效果
2022/04/28 Python