Hello!我是super喵二~~~今天练了几道面试题,突然觉得好久没有好好归纳 过排序算法了。以前都是用C/java编写排序,这次用js来总结下五大排序算法吧:

1、冒泡排序(常用及常考排序算法):

  不用多说,冒泡就是一个一个浮上去~~~也就是说需要一个一个比较:

<script type="text/javascript">
//冒泡排序,一次一次的相邻两个数比,直到把最大数找出来
var array = [5,2,4,6,8];
var temp;
function sort(array){
for(var i=0;i<array.length-1;i++){
for(var j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
temp=array[j+1];
array[j+1]=array[j];
array[j]=temp;
}
}
}
console.log(array);
} sort(array) // [2,4,5,6,8]
</script>

Bubble

2、插入排序:

  插入插入,当然需要插在该插的位置啦。简单理解就是每循环到一个数,就把它前面的数当做一个数组,然后插在数组里该插的位置:

<script type="text/javascript">
var array = [5,2,4,6,8];
var temp;
//插入排序是从第一个数开始,把第一个当成数组,第二个数与它比较,插入。再将前两个看成数组,第三个来比较插入该插的位置,依次类推
function sort(array){
for(var i=0;i<array.length;i++){
for(var j=0;j<i+1;j++){
if(array[i]<array[j]){
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
console.log(array);
} sort(array) // [2,4,5,6,8]
</script>

Insert

3、选择排序:

  一次一次选择出小的数(按升序来的话),首先认为第一个数最小,就依次比较它后面的数,有更小的就记录位置,将这个更小的记录之后,如果后面还有数,就以这个更小数为基准,再继续找,如果有比更小还小的,就记录位置,然后继续找,直到找到最小的然后和第一个数交换。接下来就从数组中的第二个数开始,依次~~~~

  

<script type="text/javascript">
var array = [5,2,4,6,8];
var temp;
//选择排序,从第一个数开始比较,遇到小与它的记录位置,再将这个数与它后面的数比较,如果没有就交换这两个数,如果有,则继续比较。
function sort(array){
for(var i=0;i<array.length-1;i++){
var index=i;
for(var j=i+1;j<array.length;j++){
if(array[index]>array[j]){
index=j;
} }
temp=array[i];
array[i]=array[index];
array[index]=temp
}
console.log(array);
} sort(array) // [2,4,5,6,8]
</script>

Select

4、快速排序:

  快速排序,众所周知,速度最快,很多公司面试都会考这个,手写的话还是有点难。大家可以主要掌握下C语言版本,用其他语言写就很容易了。。。我是参照阮一峰老师写的,主要是找一个基准元素,比基准元素小的在左边,比基准元素大的在右边,然后左右看成两个数组,分别找各自的基准元素再分组~~~直到最后~~

<script type="text/javascript">
var array = [5,2,4,6,8];
var temp;
//快速排序:先找一个基准元素,比它小的放在左边数组,大的放在右边数组,然后又分别在左边和右边数组中找出基准元素进行比较
var quicksort=function(array){
if (array.length<=1) {
return array;
}else{
var priotIndex=Math.floor(array.length/2);
var priot=array.splice(priotIndex,1)[0];
var left=[];
var right=[];
for (var i = 0; i < array.length; i++) {
if (array[i]<priot) {
left.push(array[i]);
}
else {
right.push(array[i]);
}
}
return quicksort(left).concat([priot],quicksort(right));
}
} console.log(quicksort(array)); </script>

Quick

5、合并排序:

  合并排序类似快排,主要也是才用递归,分组比再合,具体实现如下:

//归并排序:从两个两个比较,然后四个一组比较,然后8个一组比较
var array = [5,2,4,6,8];
var merge=function(left,right){
var arr=[];
while(left.length>0&&right.length>0){
if (left[0]<right[0]) {
arr.push(left.shift());
}else{
arr.push(right.shift());
}
}
return arr.concat(left,right);
} var mergeSort=function(array){
if (array.length==1) {
return array;
}else if (array.length>1) {
var middle=Math.floor(array.length/2),
left=array.slice(0,middle),
right=array.slice(middle);
return merge(mergeSort(left),mergeSort(right)); }
} console.log(mergeSort(array));

Merge

暂时就这五个,排序算法还有很多种,堆排序,随机快排。。。。这就自行了解吧,还有比较每个算法的时间复杂度,空间复杂度来决定谁更好,视情况而定吧~~

几大排序思想(由javascript编写)的更多相关文章

  1. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  2. JavaScript编写了一个计时器

    初学JavaScript,用JavaScript编写了一个计时器. 设计思想: 1.借助于Date()对象,来不断获取时间点: 2.然后用两次时间点的毫秒数相减,算出时间差: 3.累加时间差,这样就能 ...

  3. JavaScript 排序算法(JavaScript sorting algorithms)

    JavaScrip 排序算法(JavaScript Sorting Algorithms) 基础构造函数 以下几种排序算法做为方法放在构造函数里. function ArrayList () { va ...

  4. JavaScript 编写随机四位数验证码(大小写字母和数字)

    1.JavaScript编写随机四位数验证码,用到的知识点为: a.Math对象的随机数:Math.random() b.Math对象的取整    :Math.floor() c.处理所需要的下标个数 ...

  5. artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口

    artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口 自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应 ...

  6. Codeforces 588E. A Simple Task (线段树+计数排序思想)

    题目链接:http://codeforces.com/contest/558/problem/E 题意:有一串字符串,有两个操作:1操作是将l到r的字符串升序排序,0操作是降序排序. 题解:建立26棵 ...

  7. 用Javascript编写Chrome浏览器插件

    原文:http://homepage.yesky.com/62/11206062.shtml 用Javascript编写Chrome浏览器插件 2010-04-12 07:30 来源:天极网软件频道 ...

  8. javascript 编写的贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. three.js是JavaScript编写的WebGL第 三方库

    three.js是JavaScript编写的WebGL第 三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质 ...

随机推荐

  1. 20144306《网络对抗》CAL_MSF基础运用

    1  实验内容 一个主动攻击,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adobe 成功应用任何一个辅助模块 2  实验过程记录 2.1 主动攻击MS08- ...

  2. 【CSS】如何用css做一个爱心

    摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...

  3. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  4. ob缓存

    ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存.如果是header信息,直接放在程序缓存.当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器.下面我说说ob的基 ...

  5. bootstrap快速入门笔记(三)响应式,行,列,偏移量,排序

    一,响应式列重置 .clearfix <div class="row"> <div class="col-xs-6 col-sm-3"> ...

  6. 探讨数据进行AES加密和解密以及.NET Core对加密和解密为我们提供了什么?

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  7. hdu3336 kmp

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  8. 使用DocFX生成文档

    使用DocFX命令行生成文档 使用docfx 命令 1.下载 https://github.com/dotnet/docfx/releases 2.使用 创建初始项目 docfx init -q 此命 ...

  9. [笔记]机器学习(Machine Learning) - 00.目录/大纲/写在之前

    目录会根据我的学习进度而更新,给自己列一个大纲以系统地看待整个学习过程. 学习资料来源 学习的是Coursera上吴恩达(Andrew Ng)老师的机器学习视频(课程传送门,最近在"最强大脑 ...

  10. Redis学习-LUA脚本

    最近在做K线的项目中,需要计算商品的分时数据.为了保证多台机器对同一商品的计算的有序性,所以在Redis中进行计算,同时为了保证在分时数据计算过程的原子性所以使用了LUA脚本,Redis内置了对LUA ...