js三种排序算法分享


Posted in Javascript onAugust 16, 2012
/** 
* 值交换操作 
* arr 被操作的数组 
* i 被操作元素索引值 
* j 被操作两元素的距离 
*/ 
function refer(arr, i, j){ 
var change = (arr[i] - arr[i - j]) < 0 ? true : false, value; 
if (change) { 
value = arr[i]; 
arr[i] = arr[i - j]; 
arr[i - j] = value; 
return arguments.callee(arr, i - j, j); 
} 
else { 
return arr; 
} 
} 
//插入排序 
function insert(array){ 
for (var i = 1, len = array.length; i < len; i++) { 
if (array[i] < array[i - 1]) { 
refer(array, i, 1); 
} 
} 
return array; 
}

上面的部分是插入排序,然后是希尔排序:
//希尔排序 
function shell(array){ 
var length = array.length, value; 
for (var i = Math.floor(length / 2); i > 0; i = Math.floor(i / 2)) { 
for (var j = i; j < length; j++) { 
if (array[j] < array[j - i]) { 
refer(array, j, i); 
} 
else { 
continue; 
} 
} 
} 
return array; 
}

两种方法当中用到的refer方法为同一个方法。最后是归并排序:
//归并排序 
function order(arr1, arr2){ 
var arrLong = arr1.length > arr2.length ? arr1 : arr2; 
var arrShort = arr1.length <= arr2.length ? arr1 : arr2 
var arr = []; 
for (var i = 0, l = arrShort.length; i < l; i++) { 
for (var j = 0, len = arrLong.length; j < len; j++) { 
if (arrShort[i] < arrLong[j]) { 
arr.push(arrShort[i]); 
if (i == l - 1) { 
for (var m = 0, n = arrLong.length; m < n; m++) { 

arr[arr.length] = arrLong[m]; 


 } 



} 



break; 


} 
else { 
arr.push(arrLong[j]); 
arrLong.shift(); 
continue; 
} 
} 
} 
return arr; 
}

有好建议的同学可以留言!在此不多余赘述了,一切看代码吧。
Javascript 相关文章推荐
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
js图片跟随鼠标移动代码
Nov 26 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
Angular的$http与$location
Dec 26 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
Feb 27 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
Mint UI 基于 Vue.js 移动端组件库
Nov 07 Javascript
Vue.js实现图片的随意拖动方法
Mar 08 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
Canvas跟随鼠标炫彩小球的实现
Apr 11 Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 #Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
Aug 14 #Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 #Javascript
You might like
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
JavaScript 基础篇(一)
2012/03/30 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
详解Python中列表和元祖的使用方法
2015/04/25 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
解决pip install psycopg2出错问题
2020/07/09 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
护士自荐信怎么写
2013/10/18 职场文书
科室工作的个人自我评价
2013/10/30 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
读书之星事迹材料
2014/05/12 职场文书
电子专业自荐信
2014/07/01 职场文书
购房委托书
2014/10/15 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书