1、选择排序:

var arr = [3,6,7,2,6,4,1,6,8,24,12,53];
function sort(arr){
// 当数组的长度小于1的时候结束递归
if(arr.length==1){
return arr;
}
var min = arr[0],index = 0;
for(var i=0;i<arr.length;i++){
// 计算最小值,如果数组当前值比之前的值还小那么min等于最小值。
if(arr[i]<min){
min = arr[i];
// 保存下最小值的索引,好用来后面删除它
index = i;
}
}
// 删除最小值
var prev = arr.splice(index,1);
// 通过递归,将这一轮中的最小值合并下一轮的最小值,直到arr的length为1停止递归。
return prev.concat(sort(arr));
}
console.log(sort(arr));

原理分析:

  1、获取当前数组中最小的那个值。

  2、获取最小值的分析:随便从数组中拿出一个值,把这个拿出来的值当做最小值,然后和后面的值比较,如果后面的值比这个当前的值还小,那么我们把拿出来的那个值赋值成那个更小的值。

  3、保存那个最小值的索引,因为我们需要删除这个最小值,好获取下一轮第二小的值,不然下一轮的最小值还是这个值。

  4、删除数组中的最小值。

  5、因为一次只能获取一个最小值,所以我们需要通过递归,不断地重复调用它。

在前面的一篇文章中我还写给另外个两种排序算法,如果你对算法感兴趣的话可以看看js数组冒泡排序,快速排序的原理以及实现这篇文章。

2、数组去重:

var arr = [3,6,7,2,5,5,6,4,1,6,8,24,12,53];
function sort(arr){
var obj = {};
var t = [];
for(var i=0;i<arr.length;i++){
// 判断这个对象的属性是否和数组的值相同,相同则不添加,否则给这个对象添加这个值
if(!(obj[arr[i]]===arr[i])){
obj[arr[i]] = arr[i];
// 把这个过滤完以后的值添加到我们的新数组中。
t.push(arr[i]);
}
}
return t;
}
console.log(sort(arr));

原理分析:

  1、创建一个空对象和一个空数组,空对象用来过滤数组中相同的值,而空数组用来保存过滤以后的值。

  2、循环判断这个空对象的值是否和数组中的值一样,如果一样就不理会,如果这个对象中没有这个值就添加,并且把这个值添加到我们创建的数组中。

JS算法总结的更多相关文章

  1. js算法集合(一) 水仙花数 及拓展(自幂数的判断)

    js算法集合(一) ★ 最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法到底是怎么回事,但是就是不会用代码把它写出来,这里我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法, ...

  2. js算法集合(二) javascript实现斐波那契数列 (兔子数列)

    js算法集合(二)  斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解.     Javascript实 ...

  3. js算法初窥03(简单搜索及去重算法)

    前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法--顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...

  4. JS算法练习四

    JS算法练习 1.将使用空格分隔单词使用驼峰命名连接起来: var str="HELLO world welcome to my hometown"; /*--先输入一个有空格分隔 ...

  5. JS算法练习三

    JS算法练习 1.生成一个长度为10的随机数组,使用冒泡法给数组排序 var arr=new Array(10); for (var i = 0; i <arr.length ; i++) { ...

  6. JS算法练习二

    JS算法练习 1.生成4位的随机验证码,可取大小写字母和数字 ? var validateCode = "", /*--存放生成好的验证码字符串--*/ count = 0; /* ...

  7. JS算法练习一

    JS算法练习 1.随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么? ①.数组添加元素的方式得到位数(数组长度)与值(数组元素) ①.数组添加元素的方式得到位数(数组长度)与值(数组元 ...

  8. js算法初窥05(算法模式02-动态规划与贪心算法)

    在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...

  9. js算法初窥03(搜索及去重算法)

    前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法——顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...

  10. js算法之寻路

    A*寻路算法 算法流程说明: 说明:起始节点记作S,目标节点记作E,对于任意节点P,从S到当前节点P的总移动消耗记作GP,节点P到目标E的曼哈顿距离记作HP,从节点P到相邻节点N的移动消耗记作DPN, ...

随机推荐

  1. JavaScript 语句 数组与冒泡排序法

    数组 数组:不管是什么类型,都可以进行存放.存放是有一定顺序的. 顺序:索引号从0开始. 1.需要先对数组进行初始化 var array //数组名称 = new Arrary() //Array 注 ...

  2. listview可见再加载图片

    对于,listView如果同时含有大量文字和图片,那么对于用户,如果不需要滑动到后面,那么此时去加载网络图片,显然是耗费流量的. 此时可以做一些优化: listView.getRefreshableV ...

  3. nmap端口状态解析

    nmap端口状态解析 状态 说明 open 应用程序在该端口接收 TCP 连接或者 UDP 报文 closed 关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应.但没有应用程序在 ...

  4. WIFI WPA1/2 Crack for Windows

    0x00 前言 目前WIFI WPA破解主要 以“aircrack-ng”为代表,运行于Linux系统( 如Kali Linux ),Windows系统比较少见,主要是Windows系统下WIFI网卡 ...

  5. iOS相册、相机、通讯录权限获取

    iOS相册.相机.通讯录权限获取 说明 这是本人写的一个工具,用以便利的处理各种权限获取的操作,目前提供相册.照相机.通讯录的权限获取操作,参考了 http://www.jianshu.com/p/a ...

  6. Ubuntu虚拟机JeOS安装-2016.08.28

    根据官网的说明JeOS的镜像已经在官方不发行了,所以你在别的帖子里看到的安装jeos的镜像地址已经不适用了. 那么应该如何安装这种最小版本的linux操作系统呢? 其一,如果想要安装老版本的jeos系 ...

  7. Windows环境下面搭建Object C开发环境[转]

    1.安装编译器 Objective-C的编译器有很多,其中LLVM属于从GCC发展出来的,主要使用在苹果的平台中,GNU可以使用GnuStep,网址是http://wwwmain.gnustep.or ...

  8. ABAP程序中关于长文本的处理方法

    现象描述 长文本在SAP的运用主要体现在一些notes的记录,或者一些比较长的文本的存取,比如工作流的审批意见,采购申请和采购订单的附加说明等等.如下图: 处理过程 1:SAP中所有的长文本都存在两张 ...

  9. Navi.Soft30.开放平台.腾讯.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  10. 安装 LuaSocket

    如果你安装有 Lua 模块的安装和部署工具 -- LuaRocks,那么一条指令就能安装部署好 LuaSocket: luarocks install luasocket