代码运行环境: 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算法的更多相关文章

  1. 【原】小搞一下 javascript算法

    前言:在前端大全中看到这句话,以此共勉.基础决定你可能达到的高度, 而业务决定了你的最低瓶颈 其实javascript算法在平时的编码中用处不大,不过不妨碍我们学习它,学习一下这些算法的思想,锻炼一下 ...

  2. JavaScript算法题之–随机数的生成

    JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2      ...

  3. javascript算法汇总(持续更新中)

    1. 线性查找 <!doctype html> <html lang="en"> <head> <meta charset="U ...

  4. JavaScript算法与数据结构知识点记录

    JavaScript算法与数据结构知识点记录 zhanweifu

  5. JavaScript 算法与数据结构(转载)

    JavaScript 算法与数据结构 https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md

  6. JavaScript算法(归并排序与快速排序)

    归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...

  7. JavaScript算法(冒泡排序、选择排序与插入排序)

    冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...

  8. javascript算法挑战

    1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) ...

  9. JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的 ...

  10. FCC上的javascript算法题之中级篇

    FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...

随机推荐

  1. git常用命令 (阿里云code)

    命令行指令 Git 全局设置 git config --global user.name "马会东" git config --global user.email "ma ...

  2. 几种I/O模型功能和性能对比

    对比图 同步阻塞I/O服务端通信模型(一客户端一线程) 伪异步I/O服务端通信模型(M:N) NIO服务端和客户端通信时序图

  3. fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)

    1.值栈的Action对象中会有一个fielderror属性,代表着字段错误. fielderror是Map<String,List<String>>类型 例如下面的值栈里可看 ...

  4. Linux的一些常用快捷键和基本命令

    *******1.在Linux中,只有/能够当盘符,/首先要分配给系统盘所在分区*******2.swap交换分区,相当于Windows下的虚拟内存,用来模拟内存,当内存不够用时,就会使用交换分区.其 ...

  5. three.js学习笔记

    一.名词解释 scene - 场景 camera - 摄影机 renderer - 渲染器:描绘器 Vector - 三维向量的对象 orthographic - 正射 field of view - ...

  6. IOS ScrollView放大缩小点击位置并居中

    项目中的一个优化案例,提升用户体验,对地铁线路图点击放大.缩小,并且点击位置居中: 正常ScrollView 我们点击某一点比如屏幕右侧,想要点的位置向左移动到中心位置,很简单只有算出该点位置距中心位 ...

  7. Map接口

    Map实现的包括HashMap 和TreeMap .建议使用HashMap ,效率更高.并且允许使用null值,单是必须保证键的唯一性,TreeMap不允许有空.在添加删除和定位映射关系的时候不如Ha ...

  8. [转] 主流JS框架中DOMReady事件的实现

    在实际应用中,我们经常会遇到这样的场景,当页面加载完成后去做一些事情:绑定事件.DOM操作某些结点等.原来比较常用的是window的onload 事件,而该事件的实际效果是:当页面解析/DOM树建立完 ...

  9. 转 nutch网页快照乱码解决方法

    修改apache-tomcat-7.0.55\webapps\nutch-1.2下的cached.jsp 将content = new String(bean.getContent(details)) ...

  10. LVM原理及PV、VG、LV、PE、LE关系图

    PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区.VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立 ...