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基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
Apr 02 Javascript
jquery的ajax简单结构示例代码
Feb 17 Javascript
angularjs表格分页功能详解
Jan 21 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
Feb 11 Javascript
基于vue-video-player自定义播放器的方法
Mar 21 Javascript
node.js部署之启动后台运行forever的方法
May 23 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
vue遍历对象中的数组取值示例
Nov 07 Javascript
vue组件开发之slider组件使用详解
Aug 21 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生成二维码的两个方法和实例
2014/07/01 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
Jquery中获取iframe的代码
2011/01/11 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
Python之reload流程实例代码解析
2018/01/29 Python
python之pandas用法大全
2018/03/13 Python
python将list转为matrix的方法
2018/12/12 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Django框架封装外部函数示例
2019/05/28 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
法语专业求职信
2014/07/20 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书