diff --git a/b00-阅读笔记/学习js数据结构与算法/graph.js b/b00-阅读笔记/学习js数据结构与算法/graph.js index 9ba4989..d3869cf 100644 --- a/b00-阅读笔记/学习js数据结构与算法/graph.js +++ b/b00-阅读笔记/学习js数据结构与算法/graph.js @@ -71,6 +71,16 @@ function DFS(graph, callback) { } } +// function DFS(v, callback) { +// if (v == null) return; +// callback(v); +// v.status = 2; +// var adjVertexs = graph.getVertexAdj(v.id); +// adjVertexs.forEach(e => { +// if (e.status === 0) DFS(e, callback); +// }); +// } + var graph = new Graph(); graph.addVertex({id: 'A'}); graph.addVertex({id: 'B'}); @@ -99,4 +109,7 @@ graph.addEdge('E', 'I'); console.log('DFS:\n'); DFS(graph, e => { console.log(e.id); -}); \ No newline at end of file +}); +// DFS( graph.getVertex('A'), e => { +// console.log(e.id); +// }); \ No newline at end of file diff --git a/b00-阅读笔记/学习js数据结构与算法/sort&search.js b/b00-阅读笔记/学习js数据结构与算法/sort&search.js new file mode 100644 index 0000000..1b4c876 --- /dev/null +++ b/b00-阅读笔记/学习js数据结构与算法/sort&search.js @@ -0,0 +1,48 @@ + +function swap(arr, index1, index2) { + var temp = arr[index1]; + arr[index1] = arr[index2]; + arr[index2] = temp; +} + +function bubbleSort(arr) { + for (var i = 0, len = arr.length; i < len; i++) { + // 改进: j < len - 1 - i,已经排好序的可以不用再比较 + for(var j = 0; j < len - 1 - i; j++) { + if (arr[j] > arr[j+1]) { + swap(arr, j, j+1); + } + } + } +} + +var arr = [5,4,3,2,1]; +// bubbleSort(arr); + +function selectionSort(arr) { + var minIndex; + for (var i = 0; i < arr.length-1; i++) { + minIndex = i; + for (var j = i+1; j < arr.length; j++) { + if (arr[j] < arr[minIndex]) { + minIndex = j; + } + } + swap(arr, minIndex, i); + } +} +// selectionSort(arr); + +function insertionSort(arr) { + if (arr.length < 2) return arr; + for (var i = 1, len = arr.length; i < len; i++) { + var j = i - 1; + var temp = arr[i]; // 相当于将i提取出,留个空位 + while(j >=0 && arr[j] > temp) { + arr[j+1] = arr[j]; + j--; + } + arr[j+1] = temp; + } +} +insertionSort(arr); \ No newline at end of file diff --git a/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md b/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md index 34f1862..4271a6e 100644 --- a/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md +++ b/b00-阅读笔记/学习js数据结构与算法/学习js数据结构与算法.md @@ -480,10 +480,87 @@ function DFS(graph, callback) { } } } + +// 递归写法 +function DFS(v, callback) { + if (v == null) return; + callback(v); + v.status = 2; + var adjVertexs = graph.getVertexAdj(v.id); + adjVertexs.forEach(e => { + if (e.status === 0) DFS(e, callback); + }); +} ``` ## 排序和搜索算法 +### 冒泡排序 + +两两比较,一轮比较后最大的数沉到底部。 + +两层循环: + +* 外层循环表示比较的轮次 +* 内层循环表示每一轮冒泡 + +```js +function bubbleSort(arr) { + for (var i = 0, len = arr.length; i < len; i++) { + // 改进: j < len - 1 - i,已经排好序的可以不用再比较 + for(var j = 0; j < len - 1 - i; j++) { + if (arr[j] > arr[j+1]) { + swap(arr, j, j+1); + } + } + } +} +``` + +### 选择排序 + +找到最小值,放到第一位;找到第二小的值,放到第二位,依次类推......。 + +```js +function selectionSort(arr) { + var minIndex; + for (var i = 0; i < arr.length-1; i++) { + minIndex = i; + for (var j = i+1; j < arr.length; j++) { + if (arr[j] < arr[minIndex]) { + minIndex = j; + } + } + swap(arr, minIndex, i); + } +} +``` + +### 插入排序 + +往已经排好序的数组里面插入待排序的元素。 + +假设数组第一项排好序,从第二项开始,与前面的比较,如果比前面小,继续向前,直到比前面的大。 + +```js +function insertionSort(arr) { + if (arr.length < 2) return arr; + for (var i = 1, len = arr.length; i < len; i++) { + var j = i - 1; + var temp = arr[i]; // 相当于将i提取出,留个空位 + while(j >=0 && arr[j] > temp) { + arr[j+1] = arr[j]; + j--; + } + arr[j+1] = temp; + } +} +``` + +### 归并排序 + +### 快速排序 + ## 算法补充知识 ## 时间复杂度速查表 \ No newline at end of file