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 相关文章推荐
lib.utf.js
Aug 21 Javascript
页面回到顶部的三种实现(锚标记,js)
Oct 01 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
深入理解js数组的sort排序
May 28 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
如何提高Dom访问速度
Jan 05 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
vue2.0与bootstrap3实现列表分页效果
Nov 28 Javascript
vue2.0 实现导航守卫(路由守卫)
May 21 Javascript
jQuery each和js forEach用法比较
Feb 27 jQuery
vue将文件/图片批量打包下载zip的教程
Oct 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
python生成九宫格图片
2018/11/19 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
药品采购员岗位职责
2014/02/08 职场文书
书香家庭事迹材料
2014/05/09 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014年物流工作总结
2014/11/25 职场文书
新教师个人工作总结
2015/02/06 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
何玥事迹观后感
2015/06/16 职场文书
教师读书活动心得体会
2016/01/14 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python