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 相关文章推荐
JavaScipt基本教程之前言
Jan 16 Javascript
动态表格Table类的实现
Aug 26 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
HTML5实现留言和回复页面样式
Jul 22 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
Aug 02 Javascript
AngularJS 单元测试(一)详解
Sep 21 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
May 02 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
Sep 25 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
WordPress判断用户是否登录的代码
2011/03/17 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python获取文件ssdeep值的方法
2014/10/05 Python
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
超市收银员岗位职责
2015/04/07 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
如何基于python实现单目三维重建详解
2022/06/25 Python