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 字符串操作函数
Jul 25 Javascript
jQuery UI的Dialog无法提交问题的解决方法
Jan 11 Javascript
Node.js的npm包管理器基础使用教程
May 26 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
angularjs封装$http为factory的方法
May 18 Javascript
详解Node项目部署到云服务器上
Jul 12 Javascript
如何获取TypeScript的声明文件.d.ts
May 01 Javascript
vue 点击按钮实现动态挂载子组件的方法
Sep 07 Javascript
vue 中 命名视图的用法实例详解
Aug 14 Javascript
解决Layui 表格自适应高度的问题
Nov 15 Javascript
d3.js实现图形拖拽
Dec 19 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
写出高效jquery代码的19条指南
2014/03/19 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
python动态加载变量示例分享
2014/02/17 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
wxPython实现列表增删改查功能
2019/11/19 Python
使用python实现画AR模型时序图
2019/11/20 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
用python对excel查重
2020/12/07 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
优秀安全员事迹材料
2014/05/11 职场文书
公司财务管理制度
2015/08/04 职场文书
车间安全生产管理制度
2015/08/06 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
浅谈Node的内存泄露问题
2022/05/06 NodeJs