冒泡排序
原理:紧挨着的两个元素两两比较,如果顺序不对则交换位置
12345678910111213 function bubbleSort(arr) {for(var i = 0; i < arr.length ; i++) {for(var j = i+1; j < arr.length; j++) {if (arr[i] > arr[j]) {var temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}}var testArr = [1, 3, 2, 7, 5, 9, 0]bubbleSort(testArr)
插入排序
原理:默认第一个参数为已经是有序的,把之后的元素一个一个的插入到对应的位置,是一个稳定的排序算法。
1234567891011121314151617 function insertSort(arr) {for(var i = 1; i < arr.length ; i++) {var insertEl = arr[i];////保存要插入的元素,避免移位的时候被覆盖for(var j = i - 1; j >= 0; j--) {if (insertEl < arr[j]) {//如果要插入的元素小于当前比较的元素,则把当前比较的元素向后移动arr[j + 1] = arr[j]} else {break;}}arr[j + 1] = insertEl;//插入元素到合适的位置}}var testArr = [1, 3, 2, 7, 5, 9, 0]insertSort(testArr)console.log(testArr)
快速排序
原理:分而治之的策略,从数组中选取一个基准元素。大于基准的的元素放入右边,小于基准的放入左边,
然后进行递归操作,当数组中剩余元素只剩一个的时候,将左边和右边合起来,就变成了有序数组
1234567891011121314 function quickSort(arr, fn) {var left = [];var right = [];if (arr.length <= 1) return arr;var ele = arr.splice(Math.floor(arr.length / 2), 1)[0]for (var i = 0; i < arr.length; i++) {if (fn(arr[i], ele)) {right.push(arr[i]);} else {left.push(arr[i]);}}return quickSort(left, fn).concat([ele], quickSort(right, fn))}