博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript的排序算法
阅读量:6465 次
发布时间:2019-06-23

本文共 2739 字,大约阅读时间需要 9 分钟。

零、写在最前

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

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

  附上SortAnimate网站链接:

一、冒泡排序

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

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

1 function bubbleSort(arr){ 2     for(var i=0;i
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

三、插入排序

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

1 function insertSort(arr){ 2     var arrLen=arr.length; 3     for(var i=0;i
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

你可能感兴趣的文章
node中非常重要的process对象,Child Process模块
查看>>
Webserver管理系列:3、Windows Update
查看>>
HDOJ 2151
查看>>
open-falcon
查看>>
doc2vec使用说明(一)gensim工具包TaggedLineDocument
查看>>
Q:图像太大,在opencv上显示不完全
查看>>
利用ItextPdf、core-renderer-R8 来生成PDF
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
js滚动加载到底部
查看>>
Virtualbox 虚拟机网络不通
查看>>
memcache数据库和redis数据库的区别(理论)
查看>>
我的友情链接
查看>>
MyBatis+Spring结合
查看>>
Office 365之SkyDrive Pro
查看>>
Java Web 高性能开发
查看>>
初识Scala反射
查看>>