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----文件操作
Jan 18 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
Es6 写的文件import 起来解决方案详解
Dec 13 Javascript
servlet+jquery实现文件上传进度条示例代码
Jan 25 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
Apr 16 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
Vue组件中prop属性使用说明实例代码详解
May 31 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
Vuex的actions属性的具体使用
Apr 14 Javascript
原生js实现放大镜组件
Jan 22 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
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
图片完美缩放
2006/09/07 Javascript
js 加载并解析XML字符串的代码
2009/12/13 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
Less 安装及基本用法
2018/05/05 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python连接MySQL数据库实例分析
2015/05/12 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
python实现飞机大战小游戏
2019/11/08 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
日本航空官方网站:JAL
2019/06/19 全球购物
免职证明样本
2014/10/23 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
Go语言设计模式之结构型模式
2021/06/22 Golang