js几种数组排序及sort的实现
给出以下数组,并进行排序处理
var arr = new Array('1','3','8','2','3','5');
1、 插入法排序
- Array.prototype.csSort = function() {
- var newarr = this;
- /** 1、 插入法排序
- * 插入发排序,即那数组的后边一项和前面一项对比,如果后面一项小于前面
- * 一项,则将两者位置互换,从数组第2个元素开始对比;如下示例
- */
- for (let i = 1; i < newarr.length; i++) {
- for (let j = i; j > 0; j--) {
- if (newarr[j] < newarr[j-1]) {
- let pre = newarr[j];
- newarr[j] = newarr[j-1];
- newarr[j-1] = pre;
- };
- };
- };
- return newarr;
- }
- console.log(arr.csSort().toString());
2、 冒泡法排序
- Array.prototype.csSort = function() {
- var newarr = this;
- /** 2、 冒泡法排序
- * 插入发排序,即那数组的前一项和后一项对比,如果前面一项小于后面
- * 一项,则将两者位置互换,从数组第1个元素开始对比;如下示例
- */
- for (let i = 0; i < newarr.length; i++) {
- for (let j = 0; j < newarr.length; j++) {
- if (newarr[j] > newarr[j+1]) {
- let pre = newarr[j];
- newarr[j] = newarr[j+1];
- newarr[j+1] = pre;
- };
- };
- };
- return newarr;
- }
- console.log(arr.csSort().toString());
sort排序的实现原理
js中sort排序方法使用简单,用于对数组排序,并返回数组,使用方法也很简单
Array.sort()
可以看出sort是一个方法,该方法内部对该数组对象进行一些操作,又返回来一个数组,不传参数的话排序默认根据字符串的Unicode排序
如下代码:
- var arr = new Array('1','3','8','55','2','3','5','66');
- arr = arr.sort();
- console.log(arr.toString())
- // 1,2,3,3,5,55,66,8
可以看到上面的输出结果并没有按照大小进行排列,所以这种情况就需要往sort里传入一个参数
Array.sort(func);
传递参数这种情况所传的参数必须为一个函数,该函数对a,b两个参数进行比较,返回一个结果,具体如下
a 大于 b 返回一个大于0的值,a在b位置的后面
a 等于 b 返回一个等于0的值,a、b位置不变
a 小于 b 返回一个小于0的值,a在b位置的前面
如下代码
- var arr = new Array('1','3','8','55','2','3','5','66');
- function compare(a, b) {
- return a - b;
- }
- arr = arr.sort(compare);
- console.log(arr.toString())
- // 1,2,3,3,5,8,55,66
当compare函数里返回a-b的时候,可以看到是升序排列,再看以下降序
- var arr = new Array('1','3','8','55','2','3','5','66');
- function compare(a, b) {
- return b - a;
- }
- arr = arr.sort(compare);
- console.log(arr.toString())
- // 66,55,8,5,3,3,2,1
对于对象的处理也是如此
- var arr = [
- {name:"zhangsan", age: 21},
- {name:"lisi", age: 23},
- {name:"wangwu", age: 20},
- {name:"zhaoliu", age: 18},
- {name:"xiaoming", age: 17},
- {name:"xiaolan", age: 25}
- ]
- function compare(arg) {
- return function(a, b) {
- return a[arg] - b[arg];
- }
- }
- arr = arr.sort(compare('age'));
- console.log(arr)
结果为
可以根据对象的某一个属性进行排序
sort的使用方法是很简单,究其原理感觉内部是冒泡排序的原理,通过对相邻的两个元素对比,如果前面的必后面的小,则位置不变,反之则替换位置,其原理可参考上面提到过的冒泡排序原理。
js几种数组排序及sort的实现的更多相关文章
- 深入探讨JS中的数组排序函数sort()和reverse()
最近在研究Javascript发现了其中一些比较灵异的事情.有点让人感到无语比如: alert(typeof( NaN == NaN));//结果为假. alert(typeof( NaN != Na ...
- JS中的数组排序函数sort()
JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort ...
- JS二维数组排序组合
需求是这样的:http://q.cnblogs.com/q/29093/ 这里简述一下: 现在有一个不确定长度的数组.比如:var temp=[["Fu","Hai&qu ...
- JS几种数组遍历方式以及性能分析对比
前言 这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比 起由 在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得 ...
- js两种定义函数、继承方式及区别
一:js两种定义函数的方式及区别 1:函数声明: function sayA() { alert("i am A"); } 2:函数表达式: var sayB = function ...
- 【翻译】在Ext JS 5种使用ViewControllers
原文:Using ViewControllers in Ext JS 5 简单介绍 在Ext JS 5中,在应用程序架构方面提供了一些令人兴奋的改进,如加入了ViewModels.MVVM以及view ...
- 原生Js 两种方法实现页面关键字高亮显示
原生Js 两种方法实现页面关键字高亮显示 上网看了看别人写的,不是兼容问题就是代码繁琐,自己琢磨了一下用两种方法都可以实现,各有利弊. 方法一 依靠正则表达式修改 1.获取obj的html2.统一替换 ...
- js介绍,js三种引入方式,js选择器,js四种调试方式,js操作页面文档DOM(修改文本,修改css样式,修改属性)
js介绍 js运行编写在浏览器上的脚本语言(外挂,具有逻辑性) 脚本语言:运行在浏览器上的独立的代码块(具有逻辑性) 操作BOM 浏览器对象盒子 操作DOM 文本对象 js三种引入方式 (1)行间式: ...
- 2.32 js几种定位方法总结
2.32 js几种定位方法总结 前言本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法除了id是定位到的是单个element元素对象, ...
随机推荐
- 泡泡一分钟: A Linear Least Square Initialization Method for 3D Pose Graph Optimization Problem
张宁 A Linear Least Square Initialization Method for 3D Pose Graph Optimization Problem "链接:https ...
- Spring Cloud与Docker微服务架构实战 PDF版 内含目录
Spring Cloud与Docker微服务架构实战 目录 1 微服务架构概述 1 1.1 单体应用架构存在的问题1 1.2 如何解决单体应用架构存在的问题3 1.3 什么是微服务3 1.4 微服务 ...
- 使用idea创建简单的webservice服务
New project: 生成HelloWorld.wsdl: 配置好tomcat后还需要加入 Axis 的库: 启动后,访问http://localhost:8080/services: 点击He ...
- Java合并(连接)多个音频
java sound resource 合并的说法有歧义,为了方便大家搜索到这里,所以用这个标题,实际上是连接(concat),可以理解为字符串concat方法所指定的含义. AudioConcat. ...
- LeetCode_392. Is Subsequence
392. Is Subsequence Easy Given a string s and a string t, check if s is subsequence of t. You may as ...
- 【ML】京东人工智能设计神器「羚珑」
https://www.uisdc.com/linglong 文后的彩蛋说的特别好,让设计师发挥更高阶的价值.
- laravel redis sentinel 和 redis cluster 配置
laravel redis sentinel配置: 'redis' => [ 'cluster' => false, 'options' => [ 'replication' =&g ...
- idea能用下划线替换红色报错吗?我色弱,用idea简直太痛苦了
看看下图的idea,如果某个类的包路径没有引进来,使用颜色来提示,这对于色弱的程序员简直是一种折磨,有没有可以改成eclipse的那种报错提示方式? 个人感觉idea真的没有eclipse友好,也许是 ...
- 【Leetcode_easy】989. Add to Array-Form of Integer
problem 989. Add to Array-Form of Integer 参考 1. Leetcode_easy_989. Add to Array-Form of Integer; 完
- 关于css清除元素浮动的方法总结(overflow clear floatfix)
在前两天的一个面试中考官问我web中清除浮动的一些css常用方法,我很轻松的答出了: 1.overflow:hidden 2.clear:both 3.floatfix类 然后问题就来了,考官接着问' ...