疾速排序
'use strict';const quickSort = function (array, low, high) { if (low >= high) { return; } let i = low; let j = high; const tmp = array[i]; while (i < j) { while (i < j && array[j] >= tmp) { j--; } if (i < j) { array[i++] = array[j]; } while (i < j && array[i] <= tmp) { i++; } if (i < j) { array[j--] = array[i]; } } array[i] = tmp; quickSort(array, low, i - 1); quickSort(array, i + 1, high);}const arr = [1, 23, 7, 123, 45, 78, 10];console.log(arr);quickSort(arr, 0, arr.length - 1);console.log(arr);
归并排序
'use strict';// 两个有序数组合并const memeryArray = function (arr1, arr2) { const c = []; let i = 0; let j = 0; let k = 0; while (i < arr1.length && j < arr2.length) { if (arr1[i] < arr2[j]) c[k++] = arr1[i++]; else c[k++] = arr2[j++]; } while (i < arr1.length) c[k++] = arr1[i++]; while (j < arr2.length) c[k++] = arr2[j++]; return c;}// 将同一数组,两段有序序列合并const memery = function (arr, first, mid, last) { const temp = []; let i = first; const j = mid; let m = mid + 1; const n = last; let k = 0; while (i <= j && m <= n) { if (arr[i] < arr [m]) temp[k++] = arr[i++]; else temp[k++] = arr[m++]; } while (i <= j) temp[k++] = arr[i++]; while (m <= n) temp[k++] = arr[m++]; for (i = 0; i < k; i++) arr[first + i] = temp[i];}const mergeSort = function (arr, first, last) { if (!Array.isArray(arr)) throw new Error('argument is not a array'); if (first < last) { const mid = parseInt((first + last) / 2, 10); mergeSort(arr, first, mid); mergeSort(arr, mid + 1, last); memery(arr, first, mid, last); }};const arr1 = [1, 7, 13, 20, 6, 9, 10, 10, 11, 26, 29];console.log(arr1);mergeSort(arr1, 0, arr1.length - 1);console.log(arr1);