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 add event remove event
Apr 07 Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
JavaScript操作HTML元素和样式的方法详解
Oct 21 Javascript
javascript事件处理模型实例说明
May 31 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
jquery.validate表单验证插件使用方法解析
Nov 07 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
Dec 14 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
Jun 13 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
May 10 Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 Javascript
Vue中用props给data赋初始值遇到的问题解决
Nov 27 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
从零学Python之hello world
2014/05/21 Python
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
宿舍打麻将检讨书
2014/01/24 职场文书
学生会主席演讲稿
2014/04/25 职场文书
大三学习计划书范文
2014/05/02 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
检讨书模板大全
2015/05/07 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
浅谈JS的原型和原型链
2021/06/04 Javascript
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
python脚本框架webpy的url映射详解
2021/11/20 Python