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 在网页中的运用(asp.net)
Nov 23 Javascript
javascript调试说明
Jun 07 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
javascript常用功能汇总
Jul 05 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
Sep 21 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
Sep 30 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
js实现自定义滚动条的示例
Oct 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生成图形(Libchart)实例
2013/11/06 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
详解vue v-model
2020/08/31 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
python文件写入write()的操作
2019/05/14 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
介绍Java的内部类
2012/10/27 面试题
警察先进个人事迹材料
2014/05/16 职场文书
初中家长评语大全
2014/12/26 职场文书
宣传委员竞选稿
2015/11/19 职场文书
六五普法心得体会2016
2016/01/21 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python