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 相关文章推荐
JavaScript实现Sleep函数的代码
Mar 04 Javascript
JavaScript全局函数使用简单说明
Mar 11 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
Jun 20 Javascript
js控制input框只读实现示例
Jan 20 Javascript
JQuery下拉框应用示例介绍
Apr 23 Javascript
jquery xMarquee实现文字水平无缝滚动效果
Apr 29 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
AngularJS实现Model缓存的方式
Feb 03 Javascript
vuex实现简易计数器
Oct 27 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
JavaScript遍历DOM元素的常见方式示例
Feb 16 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
mysql时区问题
2008/03/26 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
深入浅析vue组件间事件传递
2017/12/29 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
python的else子句使用指南
2016/02/27 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
李宁官方网店:中国运动品牌
2017/11/02 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
初中地理教学反思
2014/01/11 职场文书
单位介绍信范文
2014/01/18 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
大学生毕业评语
2014/12/31 职场文书
考试没考好检讨书
2015/05/06 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
小学毕业感言200字
2015/07/30 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书