1、冒泡排序

以从小到大排序为例,冒泡排序的原理就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素放到数组的末尾,这样内部的循环就进行了一轮,再根据外部的循环依次再把次大一点的元素放到数组的末尾,从而实现数组的逐步排序。代码如下:

// 冒泡排序
var arr = [52,3,8,57,75,2,1];
for (var i = 0; i<arr.length; i++) {for (var j =0;j<arr.length-i; j++) {if(arr[j]>arr[j+1]){var temp = arr[j];arr[j]=arr[j+1];arr[j+1]=temp; }}
}
console.log(arr); //[1, 2, 3, 8, 52, 57, 75]

这里面通过一个变量temp实现相邻两个元素的位置替换,从而循环一轮使得最大的元素放到数组的末尾。

2、快速排序

快速排序是运用递归进行循环调用函数从而使得数组进行排序,代码如下:

// 快速排序
function quickSort(arr){if(arr.length <= 1) return arr;var Temp = Math.floor(arr.length/2);var left = [],right = [];var num = arr.splice(Temp,1)[0];for(var i = 0;i < arr.length;i ++){if(arr[i] < num){left.push(arr[i]);}else {right.push(arr[i]);}}return quickSort(left).concat(num,quickSort(right));
}
var arr=[5,2,1,10,8,12,40,26,30];
console.log(quickSort(arr)); //[1, 2, 5, 8, 10, 12, 26, 30, 40]

其原理是首先创建一个递归函数,也就是函数的返回值还是函数本身,直到符合条件之后递归函数停止运行,像这个函数就是当时arr数组的长度小于等于1的时候该递归函数停止运行。基本原理就是先找到数组中的中间那个元素的索引,如果数组长度是双数,那么就默认向上取值,也就是默认取数组长度/2+1位索引,在根据索引去的数组中间的值,然后创建两个空数组,用来放置比该元素小的值和比该元素大的值,在循环数组进行判断,如果数组的元素小于该中间位置元素的值,就放到左边数组,反之放到右边的数组,在函数中返回值设置为左边数组+中间的值+右边数组的拼接新数组,然后再根据递归对左边和右边的数组分别进行刚才的操作,直到数组的长度小于或者等于1,这时候停止,这时候调用函数之后,传入一个数组,就会自动返回数组排序之后的新数组,这就是快速排序的原理。

3、sort排序

// sort排序
var arr=[8,12,312,4,5];
function sortArray(n1,n2){return n1-n2;
}
arr.sort(sortArray);
console.log(arr) //[4, 5, 8, 12, 312]

sort默认排序是按照字符来排序的,也就是ascii字母排序的,如果想要改变默认的排序方式,就要给他加一个自定义排序规则

function sortArray(n1,n2){return n1-n2;
}

这个函数的意思是:若 n1小于 n2,即 n1-n2  小于零,则返回一个小于零的值,数组将按照升序排列。

function sortArray(n1,n2){return n2-n1;
}

这个函数的意思是:若 n1 大于 n2, 即 n1 - n2 大于零,则返回一个大于零的值,数组将按照降序排列。

4、选择排序

选择排序原理就是选择出数组中最大或者是最小的数放到最前面,然后在一次循环,选择次一级最大或者最小的数,从而得到想要的排序数组。

// 选择排序
var arr = [14, 82, 7, 1, 9, 0];
for(var i = 0; i < arr.length - 1; i++){for(var j = i + 1; j < arr.length; j++){if(arr[i] > arr[j]){var tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}
console.log(arr);//[0, 1, 7, 9, 14, 82]

选择排序也是运用中间变量的方法进行了数组元素位置的变换,从而使得最大或者最小的的元素一次从前向后排列。

js数组排序的几种方法相关推荐

  1. 动态加载JS脚本的4种方法

    动态加载JS脚本的4种方法 2006-12-04 15:33 要实现动态加载JS脚本有4种方法: 1.直接document.write <script language="javasc ...

  2. node.js取参四种方法req.body,req.params,req.param,req.body

    node.js取参四种方法req.body,req.params,req.param,req.body 参考:https://my.oschina.net/u/2519530/blog/535309 ...

  3. 关于数组排序的三种方法

    每天笔记(7-29) 一.关于数组排序的三种方法 第一种,直接使用Arrays.sort()方法排序数组 public static void main(String[] args) {// 定义一个 ...

  4. js延迟加载的几种方法

    这是一个面试经常问到的问题:js的延迟加载方法 (js的延迟加载有助与提高页面的加载速度) 主要考察对程序的性能方面是否有研究,程序的性能是一个项目不断地追求的,通常也是项目完成后需要长期做的一件事情 ...

  5. 实现动态加载JS脚本有4种方法

    转自:微点阅读  https://www.weidianyuedu.com 实现动态加载JS脚本有4种方法: 1.直接document.write 这里重新温习Document.write()的用法, ...

  6. OC中数组排序的3种方法

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...

  7. 优化JS代码的34种方法(上)

    1. 含有多个条件的if语句 //longhand if(x === 'abc' || x === 'def' || x === 'ghi' || x == 'jkl'){//logic }//sho ...

  8. html怎么遍历数组,js遍历数组有多少种方法

    如果你看完了你会体会到一个人能有多无聊,这东西都能看完!!?? 大概js有以下几种循环遍历的方法: 1 let arr = ['aaa','bbb','ccc'] 2 let obj = {a:'aa ...

  9. 判断JS数据类型的四种方法

    在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined.N ...

最新文章

  1. JS 正则表达式 0.001 ~99.999
  2. 快车 FlashGet 3.1 修正版(1057)
  3. 【hdu 1043】Eight
  4. Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频
  5. 浅谈域名发散与域名收敛
  6. Python unittest中初始化固件setUp和销毁固件tearDown详解
  7. 牛客网暑期ACM多校训练营(第十场)
  8. using namespace std;的陷阱
  9. linux mint17kde 安装教程,Kubuntu 14.04 /Linux Mint 17 怎样安装 KDE 4.14.1
  10. linux 命令行下载BT种子和磁力链接 ubuntu linux 命令行下载种子
  11. 100个RPA经典应用场景解析
  12. 图解TCP/IP网络知识轻松入门 读书笔记(五)
  13. 搭建企业私有Git服务
  14. ALM系统开发工程师职业发展调查
  15. 剑灵狂欢区服务器位置,9377剑灵洪门崛起6月25日部分区合服公告
  16. 编辑为什么建议转投_将论文转投到另一期刊的利弊
  17. vue 使用pdf.js
  18. 疫情使我被迫在家朋友选择躺平,我选择了学习软件测试
  19. python接单业余赚钱的门路_程序员业余时间怎么快速一年赚200万
  20. 和 C++ 相比,我为什么要选择 Rust 来开发软件?

热门文章

  1. 网站被篡改的主要方式有几种?
  2. 移动硬盘出现参数错误,无法访问的问题
  3. 2013年01月29日
  4. 【概率论】伽马分布的期望与方差
  5. 计蒜客A1594 封印之门
  6. 人这一生为什么要努力(转自知乎)
  7. Windows CMD 指令for遍历文件夹
  8. C获取未知数组元素个数(win32)
  9. SD卡读不出来,分盘问题
  10. echarts中使用区域选择(brush)