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 相关文章推荐
js中几种去掉字串左右空格的方法
Dec 25 Javascript
简明json介绍
Sep 28 Javascript
jQuery代码优化之基本事件
Nov 01 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
Dec 17 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
Jun 17 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
May 01 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
基于JavaScript实现滑动门效果
Mar 16 Javascript
Vue中的vue-resource示例详解
Nov 02 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 Javascript
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
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/10/18 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
php获取错误信息的方法
2015/07/17 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
jQuery实现长文字部分显示代码
2013/05/13 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
浅谈js中的bind
2019/03/18 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
python 实现图片批量压缩的示例
2020/12/18 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
个人查摆剖析材料
2014/02/04 职场文书
迎新晚会主持词
2014/03/24 职场文书
新年团拜会主持词
2014/04/02 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技