js中数组排序sort方法的原理分析


Posted in Javascript onNovember 20, 2014

本文实例分析了js中数组排序sort方法的原理。分享给大家供大家参考。具体分析如下:

最近在百度的项目中要用到对数组进行排序,当然一开始自然想到了数组的sort方法,这方法应用非常简单,大致如下:

window.onload=function(){

        var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98];

        var arr2=["George","John","Thomas","James","Adrew","Martin"];

        function arrsort(a,b){

            return a-b;

            }

        console.log(arr.sort(arrsort));  //数字排序需要函数,如果要从大排到小,就return b-a;

        console.log(arr2.sort());  //字母不需要

}

但是我突然想到,sort用法为什么这么简单,其原理到底是什么呢?于是我试着不用sort对数组排序,原理是找到数组的最小值插入到新数组,然后删除数组中的这个最小值,更新数组后继续寻找最小值插入,如此循环,代码如下:
window.onload=function(){

        var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98];

        var len=arr.length;

        console.log(arr.join(","));

        var newarr=[];

        for(var i=0;i<len;i++){

            newarr.push(Math.min.apply(null,arr));  //把最小值插入新数组

            arr.splice(r(arr,Math.min.apply(null,arr)),1);  //插入后,立马删除最小值

        }

        //找到最小值在数组中的位置

        function r(s,v){

            for(k in s){

                if(s[k] == v){

                    return k;

                    }

                }

            }

        console.log(newarr.join(","))

}

PS:这只是我写的一个方法,sort的原理应该不是这样的,还可以用冒泡法对数组排序,代码我就不写了,网上一大堆.当然上面的代码只是对数字数组进行了排序,对于字符串的排序,可以考虑字符串的localeCompare方法.

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
Nov 25 Javascript
jQuery应用之jQuery链用法实例
Jan 19 Javascript
AngularJS实现Model缓存的方式
Feb 03 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
Aug 23 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
Angularjs实现上传图片预览功能
Sep 01 Javascript
微信小程序收藏功能的实现代码
Jun 12 Javascript
发布Angular应用至生产环境的方法
Dec 10 Javascript
详解Next.js页面渲染的优化方案
Jan 27 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
vue 中使用print.js导出pdf操作
Nov 13 Javascript
javascript继承机制实例详解
Nov 20 #Javascript
jQuery验证插件 Validate详解
Nov 20 #Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 #Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
Nov 19 #Javascript
实现图片预加载的三大方法及优缺点分析
Nov 19 #Javascript
jQuery Ajax()方法使用指南
Nov 19 #Javascript
javascript匿名函数实例分析
Nov 18 #Javascript
You might like
php下封装较好的数字分页方法
2010/11/23 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
深入理解js中this的用法
2016/05/28 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
如何用python免费看美剧
2020/08/11 Python
python Scrapy框架原理解析
2021/01/04 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
个人担保书格式范文
2014/05/12 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
运动会800米赞词
2015/07/22 职场文书
公司安全管理制度范本
2015/08/05 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫