javascript算法
代码运行环境: nodejs + mochajs
/*
*选择排序
*每次查找数组最小数据
*将最小数据排到左侧
*/
var assert = require('assert');
describe('Array', function() {
describe('#indexOf()', function() { var result = [1, 1, 2, 3, 55, 90] it('quickSortTest', function() {
var arr1 = [3, 2, 55, 1, 90, 1]
assert.equal(result.toString(), coolSort.quickSort(arr1).toString());
}); it('bubbleSortTest', function() {
var arr2 = [1, 3, 2, 55, 90, 1] assert.equal(result.toString(), coolSort.selectionsSort(arr2).toString());
}) it('selectionsSortTest', function() {
var arr3 = [1, 55, 2, 3, 90, 1] assert.equal(result.toString(), coolSort.selectionsSort(arr3).toString());
})
});
}); var coolSort = (function() { function compare(arg1, arg2) {
if(arg1 > arg2) {
return 1;
} else if(arg1 === arg2) {
return 0;
} else {
return -1;
}
} function swap(arr, arg1, arg2) {
var temp = arr[arg1];
arr[arg1] = arr[arg2];
arr[arg2] = temp;
} this.selectionsSort = function(arr) {
"use strict";
//判断是否是数组
if(Object.prototype.toString.call(arr) !== "[object Array]") return arr; var len = arr.length,
min = 0,
j = 0,
temp = 0; //判断数组长度
if(len <= 1) return arr; for(var i = 0; i < len -1; i++) { min = i;
//查找出最小的一个数据
for(j = i + 1; j < len; j++) {
if(compare(arr[min], arr[j]) === 1)
min = j;
}
//如果i不是最小的数据,将i与最小数据进行交换
if(min !== i) swap(arr, min, i) } return arr;
} this.quickSort = function(arr) {
"use strict";
if(arr.length <= 1) return arr; var pivotIndex = Math.floor((arr.length / 2));
var pivot = arr.splice(pivotIndex, 1); var left = [];
var right = []; for(var i =0; i < arr.length; i++) {
if(arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
} return quickSort(left).concat(pivot, quickSort(right))
} this.bubbleSort = function (arr) {
"use strict";
var temp = 0,
len = arr.length,
j = 0;
for(var i =0; i < len - 1; i++) {
for(j = 0; j < len - i - 1; j++) {
if(compare(arr[j], arr[j + 1]) === 1 ) {
swap(arr, j , j + 1);
}
}
}
return arr;
} return this;
})()
javascript算法的更多相关文章
- 【原】小搞一下 javascript算法
前言:在前端大全中看到这句话,以此共勉.基础决定你可能达到的高度, 而业务决定了你的最低瓶颈 其实javascript算法在平时的编码中用处不大,不过不妨碍我们学习它,学习一下这些算法的思想,锻炼一下 ...
- JavaScript算法题之–随机数的生成
JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2 ...
- javascript算法汇总(持续更新中)
1. 线性查找 <!doctype html> <html lang="en"> <head> <meta charset="U ...
- JavaScript算法与数据结构知识点记录
JavaScript算法与数据结构知识点记录 zhanweifu
- JavaScript 算法与数据结构(转载)
JavaScript 算法与数据结构 https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md
- JavaScript算法(归并排序与快速排序)
归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- javascript算法挑战
1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) ...
- JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的 ...
- FCC上的javascript算法题之中级篇
FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...
随机推荐
- 使用ffmpeg转换webm格式
安装ffmpeg brew install ffmpeg --with-libvpx --with-libvorbis 如果已经装过 brew reinstall ffmpeg --with-libv ...
- <<面向模式的软件架构2-并发和联网对象模式>>读书笔记
服务访问和配置模式 Wrapper Facade可以将有非对象API提供的函数和数据封装到面向对象的类接口中 就是把底层API再封装一次,让外部不用关心是调用哪个平台的API,不如锁,在不同的平台上可 ...
- [经验交流] Mesos-dns 和 Marathon-lb 简要使用方法
Mesos-dns 和 Marathon-lb 是mesosphere 官网提供的两种服务发现和负载均衡工具.官方的文档主要针对DCOS,针对其它系统的相关中文文档不多,下面是我在Centos7上的安 ...
- Elasticsearch mysql 增量同步 三表联合 脚本
在上一篇中简略的说了一下es同步数据脚本的大致情况,但是实际情况里肯定不会像上一篇里面的脚本那么简单.比如目前我就有三张表,两张实体表,一张关联表.大致实现如下: bin目录建立一个statefile ...
- SDWebImage总结
SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCache的 category,方便使用. 优点:首先NSURLCache是缓存原始数据(raw data)到磁盘 ...
- 为什么使用 Redis及其产品定位
摘自:http://www.infoq.com/cn/articles/tq-why-choose-redis 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储 ...
- css属性在各种浏览器上的兼容性
transform:在360急速浏览器不支持,在IE兼容性上看IE浏览器的版本,IE9+是支持.
- css3画三角形的原理
以前用过css3画过下拉菜单里文字后面的“下拉三角符号”,类似于下面这张图片文字后面三角符号的效果 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: ...
- Ajax跨域访问
Ajax如何跨域访问数据 最近在做项目的过程中遇到的问题,一个网站需要访问另外一个网站的数据,并且是通过脚本的方式,而由于同源策略的限制,开发人员不能再与外部服务器进行通信的时候使用XMLHttpRe ...
- SpringMVC环境搭建 配置文件_3
springmvc-servlet.xml 引入命名空间,引入注解 命名空间: xmlns="http://www.springframework.org/schema/beans" ...