|
1 | | -# JS中的常见算法 |
2 | | - |
| 1 | +##### JS中的常见算法 |
| 2 | +- 插入排序 |
3 | 3 | - 冒泡排序 |
4 | 4 | - 快速排序 |
5 | | -- 插入排序 |
| 5 | + |
| 6 | +##### 常见操作数组的 |
| 7 | + |
6 | 8 | - 数组去重复 |
7 | 9 | - 从一个长度10万的数组中,随机取出100条数据(取出的数据不能重复); |
8 | 10 |
|
| 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 | + |
| 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] |
9 | 66 |
|
10 | 67 | # 冒泡排序 |
11 | 68 |
|
|
77 | 134 | var newAry=sortAry(ary); |
78 | 135 | console.log(newAry);//[2, 6, 11, 21, 31, 33, 37, 45, 78] |
79 | 136 |
|
| 137 | + |
| 138 | +冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 |
| 139 | + |
| 140 | + |
| 141 | + |
| 142 | +算法步骤: |
| 143 | + |
| 144 | +- 1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 |
| 145 | +- 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 |
| 146 | +- 3)针对所有的元素重复以上的步骤,除了最后一个。 |
| 147 | +- 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 |
| 148 | + |
| 149 | + |
80 | 150 | # 快速排序; |
81 | 151 |
|
82 | 152 | **基本思想**:首先从数组ary选取一个基准点(通常我们取中间项作为基准点),然后遍历数组,把小于基准项放到基准点左边集合,把大于基准项放在基准点右边集合;然后对左边和右边两个集合分别再重复前面的操作;(直到每个集合就剩下一个元素的时候),其实就是一个**递归的思想**; |
83 | 153 |
|
| 154 | + |
| 155 | + |
84 | 156 | **操作步骤**: |
85 | 157 |
|
86 | 158 | var ary=[11,2,31,45,6,78,37,33,21]; |
|
117 | 189 | var newAry=quickSort(ary); |
118 | 190 | console.log(newAry);//[2, 6, 11, 21, 31, 33, 37, 45, 78] |
119 | 191 |
|
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的写法; |
125 | 192 |
|
126 | | - var ary=[11,2,31,45,6,78,37,33,21]; |
| 193 | +##### 常见操作数组的 |
127 | 194 |
|
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 | +---------- |
164 | 196 |
|
165 | 197 | # 数组去重; |
166 | 198 |
|
|
0 commit comments