寒假算法
镇长1998
菜鸟升级。
展开
-
基本排序算法:插入排序和选择排序算法的性能比较
选择排序:for(int i = 0 ; i < n ; i ++){ // 寻找[i, n)区间里的最小值 int minIndex = i; //记录在区间[i,n)区间内最小值的下标 for( int j = i + 1 ; j < n ; j ++ ) if( arr[j] < arr[mi...原创 2019-02-02 17:06:38 · 1103 阅读 · 0 评论 -
基本排序算法:归并排序
template<typename T>void __merge(T arr[], int l, int mid, int r){ T aux[r-l+1]; //aux数组是arr[]的一个副本,arr[]由来盛放最终的整体排序数组 for( int i = l ; i <= r; i ++ ) aux[i-l] = arr[i]; ...原创 2019-02-02 20:59:12 · 145 阅读 · 0 评论 -
基本排序算法:快速排序算法及其优化
快速排序:就是在一个数组中先选取一个参考值V(基准),并将数组分为小于基准和不小于基准的两部分(快速排序的基本版),并递归将左右部分两部分继续分别快速排序,用到了分治的算法思想,将一个大问题分解成一系列有相同特点或性质的子问题,当子问题仍无法解决时继续递归划分,直到子问题可以被解决为止,这样只要将子问题一一解决,总的问题也就被解决了。注意:代码涉及3个函数,需要从最下面一个开始往上看,它们是相...原创 2019-02-03 21:25:07 · 392 阅读 · 0 评论 -
基本排序算法:堆排序算法及其优化
堆结构是一个完全二叉树结构,其结构特点是一个结点有右节点就必须有右结点,而有左结点可以没有右结点,而且在最大堆上堆中某个节点的值总不大于其父节点的值。堆结构用数组实现存储。在完全二叉树中:左节点的序号是其父节点序号的2倍(从1开始存放元素),右节点的序号是其父节点序号的2*n+1。在一棵完全二叉树中第一个非叶子结点的序号是该完全二叉树中结点总数目整除以2。堆(Heap):clas...原创 2019-02-04 15:09:40 · 469 阅读 · 0 评论 -
二叉树的元素基本操作与二叉树构建
二叉搜索树的优势:高效的查找数据,高效的插入,删除数据,动态维护数据。二叉树:1.每个节点的键值大于左孩子。2.每个节点的键值小于右孩子。3.以左右孩子为根的子树仍为二分搜索树。4.二分搜索树不一定是一棵完全二叉树。5.二分搜索树一般用Node结点结构体的存储方式。 二叉搜索树结点的结构体设计:struct Node{ Key key; ...原创 2019-02-08 19:38:08 · 355 阅读 · 0 评论 -
二分搜索算法
二分搜索算法适用于有序的数列。因为要根据查找值与中间值的大小关系决定下一步是向左区间查找或者向右区间查找。// 二分查找法,在有序数组arr中,查找target// 如果找到target,返回相应的索引index// 如果没有找到target,返回-1template<typename T>int binarySearch(T arr[], int n, T target...原创 2019-02-08 20:08:22 · 111 阅读 · 0 评论 -
图的存储
图结构在计算机中一般用邻接矩阵或者邻接表来存储。 图结构可分为 ‘顶点’ 和 ‘点与点之间的连线’ 两部分。图的邻接矩阵存储结构:typedef struct{ int vexs[MaxVex]; //顶点数组 int ...原创 2019-02-11 21:41:41 · 106 阅读 · 0 评论 -
图基于邻接矩阵存储的遍历
图的遍历一般分为深度优先遍历和广度优先遍历。深度优先遍历:void dfs(MGraph G, int i){ for (j=0;j<G->numVertexes;j++) { if (G.arc[i][j]!=INFINITY && !visted[j]) //如果(i,j)之间有路的话,且结点未被访问 ...原创 2019-02-11 22:16:34 · 175 阅读 · 0 评论