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 相关文章推荐
JSQL 批量图片切换的实现代码
May 05 Javascript
Jquery 切换不同图片示例代码
Dec 05 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
基于JavaScript实现文字超出部分隐藏
Feb 29 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
Mar 04 Javascript
JS简单获取当前日期和农历日期的方法
Apr 17 Javascript
微信小程序 蓝牙的实现实例代码
Jun 27 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
jQuery实现table表格checkbox全选的方法分析
Jul 04 jQuery
Vue动态面包屑功能的实现方法
Jul 01 Javascript
layer.open 获取不到表单信息的解决方法
Sep 26 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判断所处服务器操作系统的类型
2013/06/20 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
smarty内置函数section的用法
2015/01/22 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
深入理解Nodejs Global 模块
2017/06/03 NodeJs
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python根据区号生成手机号码的方法
2015/07/08 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python快速从注释生成文档的方法
2016/12/26 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
python做反被爬保护的方法
2019/07/01 Python
Python编程中类与类的关系详解
2019/08/08 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
小露珠教学反思
2014/04/30 职场文书
企业消防安全责任书
2014/07/23 职场文书
收款委托书
2014/10/14 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
大学副班长竞选稿
2015/11/21 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书