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 相关文章推荐
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Jan 13 Javascript
用tip解决Ext列宽度不够的问题
Dec 13 Javascript
Javascript面向对象之四 继承
Feb 08 Javascript
jquery实现用户打分评分特效
May 28 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
Jun 02 Javascript
AngularJS中实现动画效果的方法
Jul 28 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 Javascript
keep-alive保持组件状态的方法
Dec 02 Javascript
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
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重定向的三种方法分享
2012/02/22 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
php中使用GD库做验证码
2016/03/31 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
js微信分享API
2020/10/11 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
Django添加feeds功能的示例
2018/08/07 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
浙大毕业生自荐信
2014/01/26 职场文书
幼教求职信
2014/03/12 职场文书
特此通知格式
2015/04/27 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Python 用户输入和while循环的操作
2021/05/23 Python