js 排序:sort()方法、冒泡排序、二分法排序。
js中的排序,这里介绍三种,sort()方法、冒泡排序、二分法排序。
1、sort方法
写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的字符编码大小排序。
写法2: 数组.sort(function(a,b){ return a-b }); 表示从大到小,(如果写 retrun b-a 则由大到小排序);
不详细解释了。
2、冒泡排序。
原理是,直接将原理可能不好懂,我们还是按照下面的方法去讲吧,这样容易懂些。
//冒泡排序
function quickSort(arr){
for(var i=0; i<arr.length-1; i++){
console.log(i);
for(var j=0; j<arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ var oldVal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = oldVal;
}
} }
}
我们假设要排序的数组是arr = [10, 8, 7, 6];
原理:
这里arr长为3,外层循环三次,当外层for循环第一次循环的时候,即i=0的时候,进入里层循环,这时候将arr循环3次(4-0-1 = 3),即将arr的第一个数挨个于后面三个数比较,如果它大于后面的某个数,就与其交换位置,这次循环结束后,arr变成了[8, 7, 6, 10];
然后开始外层的i=1的循环,进入内层循环的时候,将arr 循环2次(4-1-1 =2),即,将arr第一数与后面的两个数比较并交换位置,这次循环结束后,arr变成了[7, 6, 8 10];
然后开始完成的i=2的循环,进入内层循环的时候,将arr 循环1次(4-2-1 =1),即,将arr第一数与后面的两个数比较并交换位置,这次循环结束后,arr变成了[6, 7, 8 10];
这样就排好序了,其实原理很简单,就是利用内层循环将arr的第一个往后比较,大则后移,一次循环以后,最大的就再最后面了,这时我们只需要把前面3个再次进行比较,最大的放到倒数第二位,然后再把最前面2个进行比较,这样只需要再套一层循环让内层for循环的可以每次循环减少1个比较长度直到最前面两个最小的也比较完成即可。
3、二分法排序
方法如下,返回一个由小到大排序后的数组。(原理在代码注释中)
//二分法排序
function quickSort(arr){
if(arr.length<=1){
return arr;
}
var nowNober = arr.splice( Math.floor(arr.length/2), 1 ); //取得数组中间的值
var leftArr = [];
var reightArr = [];
for(var i=0; i<arr.length; i++){
if(parseInt(arr[i])<=nowNober){
leftArr.push(arr[i]); //把比中间值小的放一个数组
}else{
reightArr.push(arr[i]); //把比中间值大的放另一个数组
}
}
return quickSort(leftArr).concat(nowNober,quickSort(reightArr)) //在对小数组 、 大数组 继续回调上面的分组方法,最后当数组长度只有一的时候,不再往下执行,把返回的单个数组层层拼装新数组,即最后返回的排序好的数组
}
完!
js 排序:sort()方法、冒泡排序、二分法排序。的更多相关文章
- js中sort()方法冒泡排序模拟
1.sort()方法概述 sort() 方法用于对数组的元素进行排序. 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点, 首 ...
- (JavaScript基础向)sort()方法里的排序函数的理解
比较常见的解释可以看这里:js的sort()方法,这篇博客写得挺好的,一般的应用的理解已经足够了. 但是如果要活用sort()方法里面的参数——也就是排序函数的话,可能就比较难理解了. 然后我就总结出 ...
- 定制对ArrayList的sort方法的自定义排序
java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...
- 用Java集合中的Collections.sort方法对list排序的两种方法
用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- Excel VBA解读(54):排序——Sort方法
Excel VBA解读(54):排序——Sort方法 看看下面的Excel界面截图,“排序”和“筛选”往往在一起,这大概是很多数据需要先排序后筛选吧 首先以“性别”作为排序字段,升序排列,并且第一行 ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- JS中sort()方法的用法,参数以及排序原理
sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点.语法:arrayObject.sort(sortby):参数sortby可选.规定排序顺序.必须是函 ...
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
冒泡排序: function bubbleSort($array){ $len=count($array); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++){ / ...
- ArrayList 排序Sort()方法扩展
1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...
- Collections.sort方法对list排序的两种方式
Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 . 规则用来判断对象,算法则考虑如何进行排序 对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定 ...
随机推荐
- 【外文翻译】 为什么我要写 getters 和setters
原文作者: Shamik Mitra 原文链接:https://dzone.com/articles/why-should-i-write-getters-and-setters 当我开始我的java ...
- Python资源汇总
Python 目录: 管理面板 算法和设计模式 反垃圾邮件 资产管理 音频 验证 构建工具 缓存 ChatOps工具 CMS 代码分析和Linter 命令行工具 兼容性 计算机视觉 并发和并行性 组态 ...
- 创建一个JS函数,运用JS中arguments对象
Javascript中有个内置的arguments对象. arguments对象包含了参数调用的参数数组. <p>查找最大的数.</p> <p id="demo ...
- ASP.NET WebForm
ASP.NET WEBFORM Aspx aspx文件(新建项→Web窗体) .在aspx中可以使用<%=表达式%>的方式在页面的当前位置输出表达式(表达式至少要用protected级别, ...
- CKEditor不借助CKFinder实现图片上传(.net版 ashx实现)
参考博客:http://blog.csdn.net/mydwr/article/details/8669594 本人版本:4.4.6 打开文件:ckeditor/plugins/image/dialo ...
- Roguelike元素对游戏设计的影响
Roguelike game自1980年以来,就占据着游戏市场中很大的份额,而现如今的很多游戏中,也加入了Roguelike元素来起到更好的效果.我们知道Roguelike game中有着一些看似任性 ...
- app性能测试【通过loadrunner录制】
随着智能手机近年来的快速增长,从游戏娱乐到移动办公的各式各样的手机APP软件渗透到我们的生活中,对于大型的手机APP测试不仅要关注它的功能性.易用性还要关注它的性能,最近发现LoadRunner12可 ...
- 洛谷【P2393】题解
P2393 [yyy loves Maths II] 原题链接 话说,这题其实方法对了,也蛮水的. 首先方法是一样的,直接扩大忽略精度问题. 其次,我用了c++的函数控制输出小数位数,方法:cout& ...
- grep与正则表达式
grep的作用:文本搜索工具,根据用户指定的"模式"对目标文件逐行进行匹配检查:打印匹配到的行. 模式:正则表达式编写的过滤条件. 正则表达式(REGEXP):由一类特殊字符及文本 ...
- (5)微信二次开发 之 XML格式数据解析
1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...