Skip to content

Commit

Permalink
add insertSort and quickSort
Browse files Browse the repository at this point in the history
  • Loading branch information
cllgeek committed Mar 9, 2018
1 parent d73e2cc commit d66901b
Show file tree
Hide file tree
Showing 8 changed files with 132 additions and 3 deletions.
17 changes: 16 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# g_arithemetic
## g_arithemetic

前端算法代码收集库

Expand All @@ -21,3 +21,18 @@

## 在线面试编程
* [Gainlo](http://www.gainlo.co/#!/)

## 关于代码规范

俗话说,无规矩不成方圆,所以平时一定要养成良好的编码习惯

* [Code Guide](http://alloyteam.github.io/CodeGuide/)
* [在js开发前需要的东西(规范)](https://www.geekjc.com/post/5a5f2ef845e00518fed170b9)

## 关于代码测试

学习测试和持续集成(Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低)。

* [javascript CI篇](https://www.geekjc.com/book/5a9f552acb134c0648b75978)
* [测试框架 Mocha 实例教程](http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html)
* [karma 测试框架的前世今生](http://taobaofed.org/blog/2016/01/08/karma-origin/)
2 changes: 1 addition & 1 deletion dist/g_arithemetic.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions insertSort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* @desc 插入排序
* @param {Array} arr
*/
function insertSort(arr) {
var i = 1,
len = arr.length,
key;

for (; i < len; i++) {
var j = i;
var key = arr[j];
while (--j > -1) {
if (arr[j] > key) {
arr[j + 1] = arr[j];
} else {
break;
}
}

arr[j + 1] = key;
}

return arr;
}

module.exports = insertSort;
23 changes: 23 additions & 0 deletions quickSort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* @desc 快速排序,是对冒泡排序的一种改进
* @param {Array} arr
*/
function quickSort(arr) {
if (arr.length <= 1) return arr;
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];

var left = [];
var right = [];
for (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));
}

module.exports = quickSort;
4 changes: 4 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,14 @@ const arrayEqual = require('./array/arrayEqual')
const binarySearch = require('./binarySearch/binarySearch')

const bubbleSort = require('./sort/bubbleSort')
const quickSort = require('./sort/quickSort')
const insertSort = require('./sort/insertSort')

module.exports = {
arrayEqual,
binarySearch,

bubbleSort,
quickSort,
insertSort
}
27 changes: 27 additions & 0 deletions src/sort/insertSort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* @desc 插入排序
* @param {Array} arr
*/
function insertSort(arr) {
var i = 1,
len = arr.length,
key;

for (; i < len; i++) {
var j = i;
var key = arr[j];
while (--j > -1) {
if (arr[j] > key) {
arr[j + 1] = arr[j];
} else {
break;
}
}

arr[j + 1] = key;
}

return arr;
}

module.exports = insertSort;
23 changes: 23 additions & 0 deletions src/sort/quickSort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* @desc 快速排序,是对冒泡排序的一种改进
* @param {Array} arr
*/
function quickSort(arr) {
if (arr.length <= 1) return arr;
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];

var left = [];
var right = [];
for (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));
}

module.exports = quickSort;
12 changes: 11 additions & 1 deletion test/sort.test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
describe("sort arithemetic", function() {
describe("bubbleSort()", function() {
it("g_arithemetic.bubbleSort([1,2,5,3,6]) should return [1,2,3,5,6]", function() {
assert(g_arithemetic.arrayEqual(g_arithemetic.bubbleSort([1, 2, 5, 3, 6]),[1, 2, 3, 5, 6]));
assert(g_arithemetic.arrayEqual(g_arithemetic.bubbleSort([1, 2, 5, 3, 6]), [1, 2, 3, 5, 6]));
});
});
describe("insertSort()", function() {
it("g_arithemetic.insertSort([1,2,5,3,6]) should return [1,2,3,5,6]", function() {
assert(g_arithemetic.arrayEqual(g_arithemetic.insertSort([1, 2, 5, 3, 6]), [1, 2, 3, 5, 6]));
});
});
describe("quickSort()", function() {
it("g_arithemetic.quickSort([1,2,5,3,6]) should return [1,2,3,5,6]", function() {
assert(g_arithemetic.arrayEqual(g_arithemetic.quickSort([1, 2, 5, 3, 6]), [1, 2, 3, 5, 6]));
});
});
});

0 comments on commit d66901b

Please sign in to comment.