零、写在最前

  排序的方法有很多种,这篇文章只是记录我熟悉的算法;

  我发现了一个关于排序算法很有趣的网站,把相关的算法演示做成了动画,有兴趣的同学可以看看!

  附上SortAnimate网站链接:http://jun-lu.github.io/SortAnimate/index.html

一、冒泡排序

  这是一种最基础的排序算法,也就是入门级别的算法!

  原理:两两检测,比较两者之间的大小关系,大的往后丢!

 1 function bubbleSort(arr){
 2     for(var i=0;i<arr.length;i++){
 3         for(var j=0;i<arr.length-i-1;i++){
 4             if(arr[j]>arr[j+1]){
 5                 var temp=arr[j+1];
 6                 arr[j+1]=arr[j];
 7                 arr[j]=temp;
 8             }
 9         }
10     }
11     return arr;
12 }

二、快速排序

  常用、排序速度快,但有点浪费内存空间!

  原理:以中间基准点为中心进行比较,小的放左,大的放右,需要另外的2个数组存放;

 1 function quickSort(arr){
 2     if (arr.length <= 1) { return arr; }
 3     var index=Math.floor(arr.length/2);
 4     var center=arr.splice(index,1)[0];
 5     var left=[],right=[];
 6     for(var i=0;i<arr.length;i++){
 7         arr[i]<center ? left.push(arr[i]) : right.push(arr[i]);
 8     }
 9     return quickSort(left).concat([center],quickSort(right));
10 }

三、插入排序

  原理:逐个检测,最大的往最后丢,每次减少检测次数!

 1 function insertSort(arr){
 2     var arrLen=arr.length;
 3     for(var i=0;i<arrLen;i++){
 4         var index=0;
 5         for(var j=1;j<arrLen-i;j++){
 6             if(arr[j]>arr[index]) index=j;
 7         }
 8         var temp=arr[arrLen-i-1];
 9         arr[arrLen-i-1]=arr[index];
10         arr[index]=temp;
11     }
12     return arr;
13 }

四、归并排序 (2019/03/14补充)

  算法原理简单说就是拆分与合并的过程;

  拆分:反复一拆为二,直到独立为一个为止 (中间有个递归的过程,数据量大会遭遇溢出)

  合并:向上回溯,做到有序排列

  代码如下:

(function () {//例子:let arr = [2,5,4,6,9,111,0,8,1];function mergeFn(left, right) {//合并let tem = [];while (left.length > 0 && right.length > 0) {if (left[0] < right[0]) {tem.push(left.shift());} else {tem.push(right.shift());}}return tem.concat(left, right); //返回最终的数组结果
        }function slitFn(data) {//拆分let dataLen = data.length;if (dataLen === 1) {return data;}let midNum = Math.floor(dataLen / 2); //获取中间下标let leftData = data.slice(0, midNum);let rightData = data.slice(midNum);return mergeFn(slitFn(leftData), slitFn(rightData));}console.log(slitFn(arr));})()

  PS:具体分析或者是数据溢出处理可以参考 韩子迟的博客

五、选择排序 (2019/5/13补充)

  选择排序是一种简单直观的排序算法;

  原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 ; 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾; 以此类推,直到所有元素均排序完毕。

  

function selectionSort (arr) {var len = arr.length;var minIndex, temp;for (var i = 0; i < len-1; i++) {minIndex = i;for (var j = i+1; j < len; j++) {if (arr[j] < arr[minIndex]) {minIndex = j}}temp = arr[minIndex]arr[minIndex] = arr[i]arr[i] = temp}return arr
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
selectionSort(arr)

六、结尾

  排序算法还有 选择排序、希尔排序、二分排序等等.......

  选择算法还需要考虑时间复杂度、稳定性、数据重复量多少;

  我以后再学习,再来补充这篇文章!

-------------------- End ---------------------

转载于:https://www.cnblogs.com/anniey/p/6641057.html

JavaScript的排序算法相关推荐

  1. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

  2. javascript常用排序算法总结

    算法是程序的灵魂.虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的.我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅. 归并排序: 1 fun ...

  3. JavaScript实现排序算法

    排序算法主要用在元素的数组排序,常见的排序算法有冒泡排序.选择排序.插入排序.希尔排序.快速排序.归并排序等.这些排序算法都可以用JavaScript实现.下面的排序算法都假设是从小到大进行排序,从大 ...

  4. JavaScript之排序算法

    本文主要介绍三种排序算法,分别是冒泡排序.选择排序和快速排序.为方便测试,本文会随机生成长度为10的数组,数组元素的值在[1,20]之间. 1.冒泡排序 核心思路:每一轮相邻两个数进行比较,选出一个最 ...

  5. JavaScript随机排序算法1

    1.对数组循环,每一项与随机的某一项位置调换 <ul id="listOne"></ul><div id="tempOne"> ...

  6. JavaScript实现排序算法(1)——冒泡排序

    冒泡排序 冒泡排序的核心思路,就是每一轮都把最大的数"冒"到数组顶部. 1 算法过程 (从小到大排序) 1. 每一轮排序,都从第一个数开始,比较相邻的数; 2. 如果第一个数比第二 ...

  7. javascript写各种排序算法

    在知乎上看到这个题目,就自己写了一下,在这里附上链接,里面有各种排序的动态图,非常形象直观,有助于新手对排序算法理解,链接:常见排序算法之JavaScript实现 首先各种排序算法都会用到的交换函数: ...

  8. JavaScript实现十种经典排序算法(js排序算法)

    冒泡排序算法 冒泡排序(Bubble Sort)是一种简单直观的排序算法.冒泡排序算法的步骤描述如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一 ...

  9. JavaScript实现ShellSort希尔排序算法(附完整源码)

    JavaScript实现ShellSort希尔排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 ShellSort.js完整源代码 Comparator.js完整 ...

  10. JavaScript实现SelectionSort选择排序算法(附完整源码)

    JavaScript实现SelectionSort选择排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 SelectionSort.js完整源代码 Compara ...

最新文章

  1. 2013第51周二eclipse启动优化
  2. android mina分析,Android与Mina整合
  3. 【转】The password supplied with the username Domain\UserName was not correct. AD密码定期更换
  4. java 使用 new Date() 和 System.currentTimeMillis() 获取当前 时间戳
  5. Java Calendar toString()方法与示例
  6. 解析取值_圆锥曲线——高中解析几何全归纳
  7. Stateflow_报错记录
  8. mm和mmm编译说明
  9. 腾达W308r改64M内存8M闪存CPU加散热片,刷磊科NR235W/NR236W的软件
  10. sim868 c++二次开发基本完成
  11. yyyy-MM-dd 转化成 中国标准时间(Tue Dec 31 2019 00:00:00 GMT+0800 (中国标准时间))
  12. WEB测试番外之----XSS攻击
  13. 徐闻县珊瑚礁保护区可持续发展策略
  14. 路由器重温——ISIS路由-2
  15. lstm和GRU结构图
  16. ubuntu18.04 快速搭建 Hyperledger Fabric超级账本框架
  17. 阿里内部发布最新版Java进阶笔记,金九银十看这份文档就够了
  18. 求n的阶乘,求1~n的阶乘和(循环)
  19. 【十八掌●基本功篇】第一掌:Java之IO
  20. blender中文三维立体文字制作方法

热门文章

  1. UVA 1637 Double Patience
  2. Ardoino L3G4200D 三轴数字陀螺仪测试
  3. 配置STP、RSTP以及负载均衡
  4. 中文字体压缩器-解决css引入的字体太大的问题
  5. mysql-mysqldump命令导出多个数据库结构(实战)
  6. angularJs内置指令63个
  7. JavaScript入门详解
  8. myeclipse激活+Aptana安装配置
  9. 合并查找到的文件,至新的文件中
  10. vs2008补丁发布