冒泡排序
算法描述
- 比较相邻的元素 如果第一个比第二个大 那么交换两个的位置
- 对每一个相邻的元素做相同的工作 从开始的第一个对 到最后一对 这样最后的元素应该就是最大数
- 针对所有元素重复以上的步骤 除了最后一个
- 重复1~3部 直到排序完成
动画演示

代码实现
function bubble(arr) {var len = arr.lengthfor (let i = 0; i < len - 1; i++) {for (let j = 0; j < len - 1 - i; j++) {if (arr[j] > arr[j + 1]) {var temp = arr[j]arr[j] = arr[j + 1]arr[j + 1] = temp}}}}
选择排序
选择排序是一种简单直观的排序算法,他的工作原理: 首先在未排序的序列中找到最小的元素 存放在已排序的序列的器起始位置,然后再从剩余未排序的元素中继续寻找最小的元素 然后放到已排序序列的末尾 以此类推 直到所有的元素排序完毕
动画演示
代码实现
function select(arr) {var len = arr.lengthfor (let i = 0; i < len - 1; i++) {let minIndex = ifor (let j = i + 1; j < len - 1; j++) {if (arr[j] < arr[minIndex]) {minIndex = j}}let temp = arr[i]arr[i] = arr[minIndex]arr[minIndex] = temp}return arr}
插入排序
插入排序的算法描述是一种简单直观的排序算法 他的工作原理是通过构建有序序列 对于未排序的数据 在已排序的序列中从后向前扫描 找响应的位置并插入
算法描述
- 从第一个元素开始 该元素可以认为是已被排序的
- 取出下一个元素 在已经排序的元素的序列从后向前扫描
- 如果该元素大于新元素 将该元素移到下一个位置
- 重复步骤3 直到找到排序元素小于或者等于新元素的位置
- 将新元素插入到该位置
- 重复步骤2~5
动画演示

代码实现
function insertionSort(arr) {var len = arr.length;var preIndex, current;for(var i = 1; i < len; i++) {preIndex = i - 1;current = arr[i];while(preIndex >= 0 && arr[preIndex] > current) {arr[preIndex + 1] = arr[preIndex];preIndex--;}arr[preIndex + 1] = current;}return arr;}
举例说明
[8, 20, 30, 15, 25]
8 20 30 属于已排序
15 25 属未排序
15 一直往前挪
先跟30交换位置 [8, 20,15,30,25]
再跟20交换位置 [8, 15,20,30,25]
done
希尔排序
希尔排序是第一个突破O(n2)的排序算法 是简单排序的改进版 他与插入排序不同的是 它会优先选择距离较远的元素 希尔排序又叫缩小增量排序
。。。TMD 看不懂
归并排序
归并排序是建立在归并操作上的一种有效排序算法 该算法是采用分治法的一个典型应用 将已有的子序列合并 得到完全有序的序列 即先使每个子序列有序 再使子序列段有序
若将两耳有序表合并成一个有序表 成为2路归并
算法描述
- 把长度为n的输入序列分为两个长度为n/2的子序列
- 将两个子序列分别采用归并排序
-
代码实现
```javascript function mergeSort(arr) {
var len = arr.length if (len < 2) { return arr } var mid = Math.floor(len / 2) var left = arr.slice(0, mid) var right = arr.slice(mid) return merge(mergeSort(left), mergeSort(right)) }
function merge(left, right) { var result = [] while (left.length > 0 && right.length > 0) { if (left[0] >= right[0]) { result.push(right.shift()) } else { result.push(left.shift()) } } while(left.length){ result.push(left.shift()) } while(right.length){ result.push(right.shift()) } return result
}
var arr = [34,335,2,344,54,7,3,345,377,565] console.log(mergeSort(arr)) ```
快速排序
快速排序的基本思想 通过一趟排序将待排记录分割成独立的两部分 其中一部分记录的关键字均比另一部分的关键字小 则可分别对这两部分进行排序已达到整个序列有序
算法描述
- 从数列中挑出一个元素 成为基准
- 重新排序数列,将所有比基准值小的摆在前面 所有比基准值大的摆在后面 在这个分区退出之后 该基准就位于数列中间位置
- 递归地把小于基准值的子数列 和 大于基准值的子数列排序
动图演示

