自学算法
function getData (len){ var arr = []; while (len >= 0) { arr[len--] = Number((Math.random() * 100).toFixed(0)); } return arr;}function swap (arr, a, b) { return [arr[a],arr[b]] = [arr[b],arr[a]];}function quicksort (arr) { function par (arr, low, high) { var v = arr[low], i = low + 1, j = high; while (true) { while (arr[i] < v) {i++} while (arr[j] > v) {j--} if (i < j) { swap(arr, i, j); i++; j--; } else break; } swap(arr, low, j); return j; } function sort(arr, low, high) { if(low >= high) return; var i = par(arr, low, high); sort(arr, low, i - 1); sort(arr, i + 1, high); } sort(arr, 0, arr.length - 1); return arr;}function insert (arr) { for(let i = 0, len = arr.length ; i < len ; i++){ for(let j = i ; j > 0 ; j--){ if(arr[j] < arr[j - 1]) swap(arr, j, j - 1); } } return arr;}function choose (arr) { for(let i = 0, len = arr.length; i < len; i++) { let min = i; for(let j = i + 1; j < len; j++) { if(arr[j] < arr[min]) min = j; } swap(arr, min, i); } return arr;}function guibing() { function merge(arr, left, right, mid) { let i = left, j = mid + 1; for(var k = left; k <= right; k++) { copy[k] = arr[k]; } for(var k = left; k <= right; k++) { if(i > mid) arr[k] = copy[j++]; else if(j > right) arr[k] = copy[i++]; else if(arr[i] > arr[j]) arr[k] = copy[j++]; else arr[k] = copy[i++]; } } function sort (arr, left, right) { if(right <= left) return; let mid = Math.floor((right + left) / 2); sort(arr, left, mid); sort(arr, mid + 1, right); merge(arr, left, right, mid); } let copy = []; sort(arr, 0, arr.length - 1); return arr;}var arr = getData(20);var alo = { quicksort, //快排 insert, //插入 choose, //选择 guibing //归并};console.log(alo.guibing(arr));复制代码