JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
本文实例总结了JS数组排序技巧。分享给大家供大家参考,具体如下:
1、冒泡排序
var temp = 0;
for (var i = 0; i < array.length; i++)
{
for (var j = 0; j < array.length - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
console.log(array);
结果如下:

2、sort排序
var arrSimple=new Array(1,8,7,6,2,5);
arrSimple.sort();
// document.writeln(arrSimple.join());
console.log(arrSimple.join())
效果如下:

3、 快速排序
function quickSort(arr){
if(arr.length<=1){//如果数组只有一个数,就直接返回;
return arr;
}
var num=Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
var newValue=arr.splice(num,1);//找到中间数的值
var left=[],right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<newValue){
left.push(arr[i]);//基准点的左边的数传到左边数组
}else{
right.push(arr[i]);//基准点的右边的数传到右边数组
}
}
return quickSort(left).concat(newValue,quickSort(right));//递归不断重复比较
}
console.log(quickSort([31,4,5,52,1,8]));
效果如图:

4、希尔排序
function shellSort(nums){//希尔排序
var gaps=[5,3,1];//定义间隔区间
for(var g=0;g<gaps.length;g++){//一个一个间隔值开始
for(var i=gaps[g];i<nums.length;i++){//以间隔值遍历
var temp=nums[i];//选中元素
for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
nums[j]=nums[j-gaps[g]];//后移
}
nums[j]=temp;//填补
}
}
}
function show(nums){//显示数组
for(var i=0;i<nums.length;i++){
document.write(nums[i]+' ');
}
document.write('<br>');
}
var nums=[6,0,2,9,3,5,8,0,5,4];
show(nums);//6 0 2 9 3 5 8 0 5 4
shellSort(nums);//希尔排序
show(nums);//0 0 2 3 4 5 5 6 8 9
效果如图:

5、插入排序
function sort(elements){
//假设第0个元素是一个有序的数列,第1个以后的是无序的序列,
//所以从第1个元素开始将无序数列的元素插入到有序数列中
for(var i = 1; i < elements.length; i++){
//升序
if(elements[i] < elements[i-1]){
//取出无序数列中的第i个作为被插入元素
var guard = elements[i];
//记住有序数列的最后一个位置,并且将有序数列位置扩大一个
var j = i - 1;
elements[i] = elements[j];
//比大小,找到被插入元素所在的位置
while(j >= 0 && guard < elements[j]){
elements[j+1] = elements[j];
j--;
}
//插入
elements[j+1] = guard;
}
}
}
var elements = [10, 9, 8, 7, 6, 5];
console.log('before: ' + elements);
sort(elements);
console.log(' after: ' + elements);
效果如图:

6、选择排序:
function order(arry){
var ary=arry
function sorrt() {
length = ary.length;
for (var i = 0; i < length; i++) {
_min = ary[i]
k = i
for (var j = i + 1; j < length; j++) {
if (_min > ary[j]) {
_min = ary[j]
k = j
}
}
ary[k] = ary[i]
ary[i] = _min
}
return ary;
}
return {sor:sorrt};
}
var k=order([14,12,6,5,18,0,1,3,2])
console.log(k.sor())
效果如下:

附:js中数组(Array)的排序(sort)注意事项
var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组
alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序
alert(arrDemo);//10,50,51,100
arrDemo.sort(function(a,b){return a<b?1:-1});//从大到小排序
alert(arrDemo);//100,51,50,10
原文作者:祈澈姑娘
技术博客:https://www.jianshu.com/u/05f416aefbe1
90后前端妹子,爱编程,爱运营,爱折腾。
坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。
文末福利:关注「编程微刊」公众号 ,在微信后台回复「领取资源」,获取IT资源200G干货大全。公众号回复“1”,拉你进程序员技术讨论群
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)的更多相关文章
- 必备的JS调试技巧汇总
转自http://www.jb51.net/article/88891.htm 前言:任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作.一般来说调试程序是在编写 ...
- js调试技巧汇总中
由于设备多样性(PC.ios.安卓.pad.tv)以及各设备对js脚本支持性差异性.js兼容性调试显得越来越重要. 0:尽力模仿真实场景下进行调试,迅速定位问题以及提供解决方案. 1:setTimeo ...
- js常用技巧汇总
将彻底屏蔽鼠标右键 oncontextmenu="window.event.returnvalue=false" <table border oncontextmenu=re ...
- js数组排序 reverse()和sort()方法的使用
WEB前端|js数组排序reverse()和sort()方法的使用,数组中已经存在两个可以直接用来重排序的方法:reverse()和sort(). reverse()方法会对反转数组项的顺序. var ...
- 一探前端开发中的JS调试技巧
前言 调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今 ...
- 移动平台3G手机网站前端开发布局技巧汇总
移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博 发布:2011-05-10 09:11 分类:移动开发 阅读:120,618 views 7条评论 您或许正在 ...
- 移动平台WEB前端开发技巧汇总(转)
最近我很关注移动前端的知识,但做为一个UI设计师和web前端工作人员没有这个工作环境接触,做为门外汉,网上系统的知识也了了,一直有种雾里看花的感觉,见到本文,我自己是奉为经典.所以我分享之后又专门打笔 ...
- Backbone.js的技巧和模式
Backbone.js的技巧和模式 Backbone.js的技巧和模式 本文由白牙根据Phillip Whisenhunt的<Backbone.js Tips And Patterns> ...
- js数组排序,支持正反排序以及多维度排序
工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @ ...
随机推荐
- java调用com组件将office文件转换成pdf
在非常多企业级应用中都涉及到将office图片转换成pdf进行保存或者公布的场景,由于pdf格式的文档方便进行加密和权限控制(类似于百度文库).总结起来眼下将office文件转换 成pdf的方法主要有 ...
- rman数据库恢复;关键/非重要文件、影像副本、控制文件、还原点、非归档、增量、新数据库、灾难性回复
运行全然恢复:在 ARCHIVELOG 模式下 丢失了系统重要数据文件: 假设某个数据文件丢失或损坏.且该文件属于 SYSTEM 或 UNDO 表空间,请运行下面步骤: 1. 实例可能会也可能不会自己 ...
- 25.怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
转自:https://blog.csdn.net/wangyj1992/article/details/78387728 因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我 ...
- 圈复杂度(Cyclomatic Complexity)
圈复杂度(Cyclomatic Complexity)是很常用的一种度量软件代码复杂程度的标准.这里所指的“代码复杂程度”并非软件内在业务逻辑的复杂程度,而是指代码的实现方式的 复杂程度.说起来有点绕 ...
- css3 背景过度实现
代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&q ...
- java 返回json格式的数据
1 阿里巴巴的fastjson import com.alibaba.fastjson.JSON; 使用的时候 JSON.toJSON(list); 2 Gson 解析json数据 import c ...
- JAVA学习(一)——基本语法
tips:前端开发写惯了弱类型语言,再来学强类型语言,真的是被各种修饰符.类型声明给整的云里雾里,而且java语法和javascript语言差别还是很大的,所以做好笔记,把一些需要注意的地方记下来是非 ...
- OpenJDK源码研究笔记(十一):浅析Javac编译过程中的抽象语法树(IfElse,While,Switch等语句的抽象和封装)
浅析OpenJDK源码编译器Javac的语法树包com.sun.source.tree. 抽象语法树,是编译原理中的经典问题,有点难,本文只是随便写写. 0.赋值语句 public interface ...
- Java的位运算符——&0xFF的运算与讲解
快放元旦假,没心思做啥的事,就去翻以前的代码遇到这句,但是又不懂,所以只好上网找,终于懂了那么一点点. 所以那个大神看到我说的有问题,请指出!谢谢.... 一:首先区分一下 A~F的意思先 A,代表十 ...
- 安卓https
http://www.tuicool.com/articles/NrmE3e http://blog.csdn.net/guestcode/article/details/50194357 http: ...