
数据结构与算法
我爱的小明
这个作者很懒,什么都没留下…
展开
-
JS递归实现二叉树遍历
// 二叉树const root = { val: 'A', left: { val: 'B', left: { val: 'D', }, right: { val: 'E', } }, right: { val: 'C', left: { val: 'F', }, right: { val: 'G' }, }}// 前序遍历二叉树,节点 -> 左子树结点 -> 右子树结点function PreOrder(no原创 2021-07-05 17:05:14 · 278 阅读 · 0 评论 -
二分查找(JS)
简单二分查找适用条件:不存在重复元素、有序数组、查找值等于给定值// 循环function bSearch(arr, val) { if (arr.length === 0) return ; if (arr.length === 1) return arr[0]; let low = 0; let high = arr.length - 1; while(low <= high) { let mid = Math.floor(low + (high - low) / 2);原创 2021-06-25 16:53:36 · 146 阅读 · 0 评论 -
快速排序(js)
function QuickSort(arr) { // 排序并获得新的分区点位置 function partition(arr, head, tail) { if (head >= tail) return; let pivot = tail; let i = head;// 已排序标识 for (let j = head; j < tail + 1; j++) { if (arr[j] <= arr[pivot]) { const temp = arr原创 2021-06-04 16:47:04 · 124 阅读 · 0 评论 -
归并排序(js)
function MergeSort(arr) { let sortArr = arr; // 递归函数分解数据 function merge_sort_recursion(arr, head, tail) { if (head >= tail) return;// 只有一个元素,无需继续递归 const center = Math.floor((head + tail) / 2); merge_sort_recursion(arr, head, center); merge_s原创 2021-06-04 15:12:37 · 102 阅读 · 0 评论 -
选择排序(js)
function SelectionSort(arr) { for(var i = 0; i < arr.length; i++) { let min = i;// 取未排序区间最前的下标 for (var j = i; j < arr.length - 1; j++) { // 在未排序区间中寻找最小的元素,并将其下标更新为最小值的下标 if (arr[j] < arr[min]) { min = j; } } // 将未排序区间最前的值与未排原创 2021-06-03 18:48:55 · 108 阅读 · 0 评论 -
插入排序(JS)
function InsertionSort (arr, ascend = true) { if (arr.length <= 1) return arr; for (var i = 1; i < arr.length; i++) { const insertVal = arr[i];// 默认数组第一位不需要排序,从第二个开始排 let j = i - 1; for(;j >= 0; --j) { if ((arr[j] > insertVal &&原创 2021-06-03 18:08:31 · 112 阅读 · 0 评论 -
冒泡排序(含提前跳出)
function BubbleSort (arr, increase = true) { if (arr.length === 1) return arr; for(var i = arr.length; i > 0; i--) { let quit = true;// 假设此次冒泡已经完成排序 for(var j = 0; j < i; j++) { if (arr[j] > arr[j + 1] && increase) { // 升序原创 2021-06-03 16:45:07 · 358 阅读 · 0 评论