Skip to content

Commit b72536d

Browse files
committed
update some md
1 parent 9a145b8 commit b72536d

File tree

3 files changed

+168
-2
lines changed

3 files changed

+168
-2
lines changed

README.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
## g_arithemetic
2+
[![npm](https://img.shields.io/npm/v/g_arithemetic.svg)](https://www.npmjs.com/package/g_arithemetic)
3+
![Build Status](https://travis-ci.org/proYang/outils.svg?branch=master)
4+
[![Coverage](https://coveralls.io/repos/github/proYang/outils/badge.svg?branch=master)
5+
![LICENSE MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://www.npmjs.com/package/g_arithemetic)
26

37
前端算法代码收集库
48

@@ -36,3 +40,164 @@
3640
* [javascript CI篇](https://www.geekjc.com/book/5a9f552acb134c0648b75978)
3741
* [测试框架 Mocha 实例教程](http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html)
3842
* [karma 测试框架的前世今生](http://taobaofed.org/blog/2016/01/08/karma-origin/)
43+
44+
45+
## 4. 常见算法
46+
47+
#### 4.1 二分查找
48+
49+
**算法介绍**
50+
51+
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:
52+
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
53+
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
54+
(3)如果某一步数组为空,则表示找不到目标元素。
55+
56+
参考代码:
57+
58+
**非递归算法**
59+
60+
```
61+
function binary_search(arr,key){
62+
var low=0,
63+
high=arr.length-1;
64+
while(low<=high){
65+
var mid=parseInt((high+low)/2);
66+
if(key==arr[mid]){
67+
return mid;
68+
}else if(key>arr[mid]){
69+
low=mid+1;
70+
}else if(key<arr[mid]){
71+
high=mid-1;
72+
}else{
73+
return -1;
74+
}
75+
}
76+
};
77+
var arr=[1,2,3,4,5,6,7,8,9,10,11,23,44,86];
78+
var result=binary_search(arr,10);
79+
alert(result); // 9 返回目标元素的索引值
80+
```
81+
82+
**递归算法**
83+
84+
```
85+
function binary_search(arr,low,high,key){
86+
if(low>high){
87+
return -1;
88+
}
89+
var mid=parseInt((high+low)/2);
90+
if(arr[mid]==key){
91+
return mid;
92+
}else if(arr[mid]>key){
93+
high=mid-1;
94+
return binary_search(arr,low,high,key);
95+
}else if(arr[mid]<key){
96+
low=mid+1;
97+
return binary_search(arr,low,high,key);
98+
}
99+
};
100+
var arr=[1,2,3,4,5,6,7,8,9,10,11,23,44,86];
101+
var result=binary_search(arr,0,13,10);
102+
alert(result); // 9 返回目标元素的索引值
103+
```
104+
105+
#### 4.2 排序
106+
###### 4.2.1 冒泡排序
107+
108+
**算法介绍**
109+
110+
解析:
111+
1. 比较相邻的两个元素,如果前一个比后一个大,则交换位置。
112+
2. 第一轮的时候最后一个元素应该是最大的一个。
113+
3. 按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。
114+
115+
**js代码实现**
116+
117+
```
118+
function bubble_sort(arr){
119+
for(var i=0;i<arr.length-1;i++){
120+
for(var j=0;j<arr.length-i-1;j++){
121+
if(arr[j]>arr[j+1]){
122+
var swap=arr[j];
123+
arr[j]=arr[j+1];
124+
arr[j+1]=swap;
125+
}
126+
}
127+
}
128+
}
129+
130+
var arr=[3,1,5,7,2,4,9,6,10,8];
131+
bubble_sort(arr);
132+
console.log(arr);
133+
```
134+
135+
###### 4.2.2快速排序
136+
137+
**js代码实现**
138+
解析:快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。
139+
```
140+
function quick_sort(arr){
141+
if(arr.length<=1){
142+
return arr;
143+
}
144+
var pivotIndex=Math.floor(arr.length/2);
145+
var pivot=arr.splice(pivotIndex,1)[0];
146+
147+
var left=[];
148+
var right=[];
149+
for(var i=0;i<arr.length;i++){
150+
if(arr[i]<pivot){
151+
left.push(arr[i]);
152+
}else{
153+
right.push(arr[i]);
154+
}
155+
}
156+
157+
return quick_sort(left).concat([pivot],quick_sort(right));
158+
}
159+
160+
var arr=[5,6,2,1,3,8,7,1,2,3,4,7];
161+
console.log(quick_sort(arr));
162+
```
163+
164+
###### 4.2.3 插入排序
165+
**算法介绍**
166+
167+
解析:
168+
1. 从第一个元素开始,该元素可以认为已经被排序
169+
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
170+
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
171+
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
172+
5. 将新元素插入到下一位置中
173+
6. 重复步骤2
174+
175+
**js代码实现**
176+
177+
```
178+
function insert_sort(arr){
179+
var i=1,
180+
j,key,len=arr.length;
181+
for(;i<len;i++){
182+
var j=i;
183+
var key=arr[j];
184+
while(--j>-1){
185+
if(arr[j]>key){
186+
arr[j+1]=arr[j];
187+
}else{
188+
break;
189+
}
190+
}
191+
192+
arr[j+1]=key;
193+
}
194+
195+
return arr;
196+
}
197+
198+
insert_sort([2,34,54,2,5,1,7]);
199+
```
200+
201+
## 5. 最后
202+
203+
这个库暂时只收集了很小的一部分,欢迎留言或者提issue或者PR补充常见算法,让更多的人学习。

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"arithemetic"
1616
],
1717
"author": "cll",
18-
"license": "ISC",
18+
"license": "MIT",
1919
"devDependencies": {
2020
"babel-core": "^6.26.0",
2121
"babel-loader": "^7.1.2",

script/build.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ new Promise((resolve, reject) => {
3131
}) + "\n\n"
3232
);
3333
resolve();
34-
console.log(chalk.cyan(" Build complete.\n"));
34+
log(chalk.cyan(" Build complete.\n"));
35+
log(chalk.blue(" 欢迎大家加上没有的算法"))
3536
});
3637
});
3738
})

0 commit comments

Comments
 (0)