Skip to content

Commit f1fedef

Browse files
committed
MODI:算法
1 parent bd0b190 commit f1fedef

3 files changed

Lines changed: 80 additions & 47 deletions

File tree

JS算法原理/JS中的常见算法.md

Lines changed: 77 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,68 @@
1-
# JS中的常见算法
2-
1+
##### JS中的常见算法
2+
- 插入排序
33
- 冒泡排序
44
- 快速排序
5-
- 插入排序
5+
6+
##### 常见操作数组的
7+
68
- 数组去重复
79
- 从一个长度10万的数组中,随机取出100条数据(取出的数据不能重复);
810

11+
##### JS中的常见算法
12+
13+
----------
14+
15+
16+
# 插入排序
17+
18+
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
19+
20+
**操作步骤**:首先选取数组的第一项即ary[0],我们可以认为这个数是已经安排好序的,再取ary[1]项插入到已经排好序的元素中,此时只有ary[0],我们比较ary[0]和ary[1];大于ary[0]就放在后面,小于就插到ary[0]前面;要插入的元素依次为ary[1]至ary[ary.leng-1]项;插入到排序好的数组中的时候,插入每一项都需要从后面往前面遍历已经排序好的元素;
21+
22+
**如果排序好的元素比插入的元素大,则把该元素往后挪一位,知道已经排序的元素小于等于要插入的元素(或者已经遍历完已经排好序的数组项),则把要插入的元素放在该位置+1的索引位置中(反向排的时候,需要放在数组的第0个位置)**,对每个插入的元素都执行上面的操作,最终数组就是排序好的;
23+
24+
![](http://i.imgur.com/ACBXwns.gif)
25+
26+
有BUG的写法;
27+
28+
var ary=[11,2,31,45,6,78,37,33,21];
29+
30+
function insertSort(ary){
31+
var temp;//定义一个临时变量,保存要插入的值;
32+
for(var i= 1,len=ary.length;i<len;i++){
33+
if(ary[i]<ary[i-1]){
34+
temp=ary[i];
35+
ary[i]=ary[i-1];
36+
ary[i-1]=temp;
37+
}
38+
}
39+
return ary;
40+
}
41+
var newAry=insertSort(ary);
42+
console.log(newAry);//[2, 11, 31, 6, 45, 37, 33, 21, 78]
43+
44+
因为只把小的数往前移动了一次;这里需要用到while循环,把6移动2后面;
45+
46+
47+
var ary=[11,2,31,45,6,78,37,33,21];
48+
49+
function insertSort(ary){
50+
var temp;//定义一个临时变量,保存要插入的值;
51+
for(var i= 1,len=ary.length;i<len;i++){
52+
if(ary[i]<ary[i-1]){
53+
temp=ary[i];//需要插入的值;
54+
var pIndex=i-1;//需要插入值的前一个索引;
55+
while(temp<ary[pIndex]&&pIndex>=0){
56+
ary[pIndex+1]=ary[pIndex];//相当于ary[i]=ary[i-1];
57+
ary[pIndex]=temp;//相当于ary[i-1]=temp;完成一波交换;
58+
pIndex--;//准备下一波交换;
59+
}
60+
}
61+
}
62+
return ary;
63+
}
64+
var newAry=insertSort(ary);
65+
console.log(newAry);//[2, 6, 11, 21, 31, 33, 37, 45, 78]
966

1067
# 冒泡排序
1168

@@ -77,10 +134,25 @@
77134
var newAry=sortAry(ary);
78135
console.log(newAry);//[2, 6, 11, 21, 31, 33, 37, 45, 78]
79136

137+
138+
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
139+
140+
![](http://i.imgur.com/sSwJFV2.gif)
141+
142+
算法步骤:
143+
144+
- 1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
145+
- 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
146+
- 3)针对所有的元素重复以上的步骤,除了最后一个。
147+
- 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
148+
149+
80150
# 快速排序;
81151

82152
**基本思想**:首先从数组ary选取一个基准点(通常我们取中间项作为基准点),然后遍历数组,把小于基准项放到基准点左边集合,把大于基准项放在基准点右边集合;然后对左边和右边两个集合分别再重复前面的操作;(直到每个集合就剩下一个元素的时候),其实就是一个**递归的思想**
83153

154+
![](http://i.imgur.com/dERn9JJ.gif)
155+
84156
**操作步骤**
85157

86158
var ary=[11,2,31,45,6,78,37,33,21];
@@ -117,50 +189,10 @@
117189
var newAry=quickSort(ary);
118190
console.log(newAry);//[2, 6, 11, 21, 31, 33, 37, 45, 78]
119191

120-
# 插入排序
121-
122-
**操作步骤**:首先选取数组的第一项即ary[0],我们可以认为这个数是已经安排好序的,再取ary[1]项插入到已经排好序的元素中,此时只有ary[0],我们比较ary[0]和ary[1];大于ary[0]就放在后面,小于就插到ary[0]前面;要插入的元素依次为ary[1]至ary[ary.leng-1]项;插入到排序好的数组中的时候,插入每一项都需要从后面往前面遍历已经排序好的元素;**如果排序好的元素比插入的元素大,则把该元素往后挪一位,知道已经排序的元素小于等于要插入的元素(或者已经遍历完已经排好序的数组项),则把要插入的元素放在该位置+1的索引位置中(反向排的时候,需要放在数组的第0个位置)**,对每个插入的元素都执行上面的操作,最终数组就是排序好的;
123-
124-
有BUG的写法;
125192

126-
var ary=[11,2,31,45,6,78,37,33,21];
193+
##### 常见操作数组的
127194

128-
function insertSort(ary){
129-
var temp;//定义一个临时变量,保存要插入的值;
130-
for(var i= 1,len=ary.length;i<len;i++){
131-
if(ary[i]<ary[i-1]){
132-
temp=ary[i];
133-
ary[i]=ary[i-1];
134-
ary[i-1]=temp;
135-
}
136-
}
137-
return ary;
138-
}
139-
var newAry=insertSort(ary);
140-
console.log(newAry);//[2, 11, 31, 6, 45, 37, 33, 21, 78]
141-
142-
因为只把小的数往前移动了一次;这里需要用到while循环,把6移动2后面;
143-
144-
145-
var ary=[11,2,31,45,6,78,37,33,21];
146-
147-
function insertSort(ary){
148-
var temp;//定义一个临时变量,保存要插入的值;
149-
for(var i= 1,len=ary.length;i<len;i++){
150-
if(ary[i]<ary[i-1]){
151-
temp=ary[i];//需要插入的值;
152-
var pIndex=i-1;//需要插入值的前一个索引;
153-
while(temp<ary[pIndex]&&pIndex>=0){
154-
ary[pIndex+1]=ary[pIndex];//相当于ary[i]=ary[i-1];
155-
ary[pIndex]=temp;//相当于ary[i-1]=temp;完成一波交换;
156-
pIndex--;//准备下一波交换;
157-
}
158-
}
159-
}
160-
return ary;
161-
}
162-
var newAry=insertSort(ary);
163-
console.log(newAry);//[2, 6, 11, 21, 31, 33, 37, 45, 78]
195+
----------
164196

165197
# 数组去重;
166198

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ var testObj={
44
};
55
console.log(Object.isExtensible(testObj)); //true
66
Object.preventExtensions(testObj);
7-
console.log(Object.isExtensible(testObj)); //false
7+
console.log(Object.isExtensible(testObj)); //false

test-file.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
</head>
1616
<body>
1717
<div id="test">2222222222</div>
18+
1819
<script>
1920
var div = document.getElementById("test");
2021
var left;
@@ -33,4 +34,4 @@
3334
}, 10);
3435
</script>
3536
</body>
36-
</html>
37+
</html>

0 commit comments

Comments
 (0)