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 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
jQuery解决iframe高度自适应代码
Dec 20 Javascript
Jvascript学习实践案例(开发常用)
Jun 25 Javascript
jQuery判断checkbox是否选中的3种方法
Aug 12 Javascript
angular中使用路由和$location切换视图
Jan 23 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
12 款 JS 代码测试必备工具(翻译)
Dec 13 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
Sep 05 Javascript
layer.prompt输入层的例子
Sep 24 Javascript
前端深入理解Typescript泛型概念
Mar 09 Javascript
JavaScript编写开发动态时钟
Jul 29 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 模拟get_headers函数的代码示例
2013/04/27 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
Jquery倒计时源码分享
2014/05/16 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
深入浅析vue中cross-env的使用
2019/09/12 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
python selenium firefox使用详解
2019/02/26 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
python如何写个俄罗斯方块
2020/11/06 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
教师自荐信
2013/12/10 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
五四演讲稿范文
2014/09/03 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers