算法
文章平均质量分 50
似水流年1990
这个作者很懒,什么都没留下…
展开
-
使用TypeScript脚本实现幂函数功能Pow(x, n)
let myPow = function (x, n) { let r = 1; let len = Math.abs(n); for (let i = len; i > 0; i--) { if (i % 2 == 0) { x = x * x; i = i / 2; } ...原创 2019-12-30 20:16:33 · 1295 阅读 · 0 评论 -
二叉树遍历之前序遍历,中序遍历,后序遍历
上图遍历结果如下:前序遍历(根左右):ABCDEFGHK中序遍历(左根右) :BDCAEHGKF后续遍历(左右根):DCBHKGFEA以中序遍历为例:先遍历左子树,在遍历根节点,在遍历右子树。上图中,A的左子树为检查B的左子树为空,然后遍历根节点B,得到结果B,然后遍历B的右子树为然后遍历C的左子树,得到结果BD,然后遍历根节点C,得到结果BDC,然后遍历C的右子树为空,返回...原创 2019-08-14 09:10:22 · 1233 阅读 · 0 评论 -
排序算法之归并排序(C/C++实现)
以下函数用于实现将数组a中,从索引L到R的元素以mid为界,将mid左边(已由小到大排好序)和右边(已由小到大排好序),按照由小到大合并一起放回索引L到R中L mid R(1)将数组a从索引L到R一次放入aux从索引0到R-L(2)若i>mid,则表明mid左边已全部放入a[k],mid右边已排过序,直接一个接一个循环放入a[k]即可(3)与(2)相反,mid左边边已排过...原创 2019-08-02 18:36:27 · 1574 阅读 · 0 评论 -
排序算法之堆排序(C/C++实现)
void swap(int& a, int& b) { int temp = a; a = b; b = temp;}//堆调整算法实现void max_HeapAdjust(int* A, int index, int n) { if (2 * index < n){ int cur = index; if (2 * index + 1 < n ...原创 2019-05-30 12:48:32 · 361 阅读 · 0 评论 -
排序算法之选择排序(C/C++实现)
void SelectionSort(int arr[], int length){ for (int i = 0; i &amp;lt; length; i++) { int index = i; for (int j = i+1; j &amp;lt; length; j++) { if (arr[j] &amp;lt; arr[index]) { index = j; ...原创 2019-01-16 17:22:50 · 216 阅读 · 0 评论 -
排序算法之快速排序(C/C++实现)
int OnceSort(int arr[], int first, int end){ int i = first, j = end; //当i&lt;j即移动的点还没到中间时循环 while (i &lt; j){ //右边区开始,保证i&lt;j并且arr[i]小于或者等于arr[j]的时候就向左遍历 while (i &lt; j &amp;&amp; arr[i] &am原创 2019-01-16 16:49:01 · 413 阅读 · 0 评论 -
排序算法之希尔(Shell)排序(C/C++实现)
void ShellSort(int arr[], int length){ int increasement = length; int i, j, k; do { // 确定分组的增量 increasement = increasement / 3 + 1; //取increasement,将数组分成increasement个子序列 for (i = 0; i &amp;lt...转载 2019-01-24 09:31:36 · 286 阅读 · 0 评论 -
排序算法之冒泡排序(C/C++)
void BubbleSort(int nArr[], int nLen){ for (int i = 0; i < nLen-1; ++i) { for (int j = 0; j <nLen-1-i; j++) { if (nArr[j]>nArr[j+1]) { int nTemp = nArr[j]; nArr[j] = nArr...原创 2018-11-02 18:10:20 · 207 阅读 · 0 评论 -
排序算法之直接插入(C/C++实现)
void InsertSort(int nArr[], int nLen){ int i, j; int nTemp; for (i = 1; i &amp;amp;amp;lt; nLen;++i) { nTemp = nArr[i]; for (j = i - 1; j &amp;amp;amp;gt;= 0 &amp;amp;amp;amp;&amp;amp;amp;amp; nTemp&原创 2018-11-01 13:04:38 · 452 阅读 · 0 评论 -
二分查找(另一种独特实现)
int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; int left = 0, right = nums.size() - 1; while (left + 1 < right){ // Prevent ...转载 2018-09-19 19:48:58 · 213 阅读 · 0 评论 -
循环队列 (实现)
在循环队列中,我们使用一个数组和两个指针(head 和 tail)。 head 表示队列的起始位置,tail 表示队列的结束位置。class MyCircularQueue {private: vector&lt;int&gt; data; int head; int tail; int size;public: /** Initialize you...转载 2018-09-11 09:11:41 · 607 阅读 · 1 评论 -
队列(实现)
队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。#include <iostream>class MyQueue { private: // store elements vector<int> data; // a pointe...转载 2018-09-11 09:08:34 · 269 阅读 · 0 评论 -
栈和深度优先搜索(DFS)
如上图: 使用 DFS 找出从根结点 A 到目标结点 G 的路径 步骤如下: 1:从根节点A开始,选择节点B的路径,继续深入,直到E,无法更进一步深入,此时栈内容为ABE 依次退栈EB 2:回溯到A节点,选择第二条路径C入栈,E入栈,但E已被访问过,弹出E,回溯到C节点;选择另一条路径 F入栈,G入栈。此时我们找到了G。此时栈内容(路径)为ACFG总的来说,在我...原创 2018-09-14 09:09:07 · 4978 阅读 · 1 评论 -
栈(C++实现)
与队列不同,栈是一个 LIFO 数据结构。通常,插入操作在栈中被称作入栈 push 。与队列类似,总是在堆栈的末尾添加一个新元素。但是,删除操作,退栈 pop ,将始终删除队列中相对于它的最后一个元素。#include <iostream>class MyStack { private: vector<int> data; ...转载 2018-09-14 08:53:58 · 276 阅读 · 0 评论 -
二分查找(一个高级点的实现)
int binarySearch(vector&lt;int&gt;&amp; nums, int target){ if(nums.size() == 0) return -1; int left = 0, right = nums.size(); while(left &lt; right){ // Prevent (left + right) overflow...转载 2018-09-18 17:32:06 · 307 阅读 · 0 评论 -
队列和广度优先搜索(BFS)
BFS:全称Breadth First Search,宽度优先搜索,又称广度优先搜索 如上图: 使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径。 步骤如下: 1:根节点A节点放入队列,将与A相邻的节点放入队列即队列中元素为ABCD 2:A出队,将与队头B相邻的节点放入队列,此时队列元素为BCDE 3:B出队,将与队头C相邻的元素放入队列,此时队列元素为CDEF 4...原创 2018-09-13 09:14:29 · 4193 阅读 · 4 评论 -
二分查找(一个最基本的实现)
int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; int left = 0, right = nums.size() - 1; while(left <= right){ // Prevent (left + right) over...转载 2018-09-17 09:18:33 · 229 阅读 · 0 评论