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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
jquery调用wcf并展示出数据的方法
Jul 07 Javascript
JavaScript 函数replace深入了解
Mar 14 Javascript
原生js实现半透明遮罩层效果具体代码
Jun 06 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
Jun 02 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
JavaScript实现一个简易的计算器实例代码
May 10 Javascript
vue中使用echarts制作圆环图的实例代码
Jul 27 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 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查看session内容的函数
2008/08/27 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
jQuery 性能优化指南(3)
2009/05/21 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
JS在if中的强制类型转换方式
2018/07/15 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
jQuery实现电梯导航模块
2020/12/22 jQuery
原生js实现滑块区间组件
2021/01/20 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python实现清屏的方法
2015/04/30 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
高中生学习的自我评价
2013/12/14 职场文书
作文批改评语大全
2014/04/23 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
简历自荐信范文
2015/03/09 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle