![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Data Structure and Algorithm
文章平均质量分 67
iamxiaofeifei
Thinking and coding...
展开
-
数据结构--二叉树
1. 树基本概念:根节点(root)、叶节点(leaf)、儿子(child)、父亲(parent)、兄弟(sibling)、祖父(grandparent)、孙子(grandchild)、边(edge)、路径(path)路径的长(length):路径上边的条数。祖先(ancestor)和后裔(descendant):存在节点a到节点b的一条路径a –> b,则a是b的祖先,b是a的后裔。真祖先原创 2017-08-04 09:28:18 · 875 阅读 · 0 评论 -
常规排序算法总结
首先推荐一个学习数据结构的优秀的可视化网站:https://visualgo.net/en/sorting主要总结以下6种排序算法,其中插入排序、选择排序、归并排序、快速排序。 1. 冒泡排序(Bubble Sort)和快速排序(Quick Sort)和随机快速排序(Random quick Sort) 博文待写 2. 插入排序(Insertion Sort)和希尔排序(Shell Sort)原创 2017-08-07 13:31:29 · 445 阅读 · 0 评论 -
冒泡排序和快速排序
冒泡排序:#include <iostream>#include <vector>using namespace std;// 冒泡排序void bubbleSort(vector<int>& arr){ if(arr.empty()) return; // 外循环n-1次 // 循环一次的结果:将最大的元素通过多次交换挪至最后的位置 for(in原创 2017-08-07 14:43:31 · 365 阅读 · 0 评论 -
选择排序和堆排序
选择排序:每次选择最小的元素。 遍历第一遍:第一位开始,从左到右找到最小的元素,和第一位交换 遍历第二遍:第二位开始,从左到右找到最小的元素,和第二位交换 遍历第三遍:第三位开始,从左到右找到最小的元素,和第三位交换 遍历第四遍:第四位开始,从左到右找到最小的元素,和第四位交换 。。。。 就这么简单!#include <iostream>#include <vector>using n原创 2017-08-24 14:10:34 · 200 阅读 · 0 评论 -
插入排序和希尔排序
插入排序:保证左侧有序,每次遍历到一个元素的时候,将其放在左侧合适的位置处。#include <iostream>#include <vector>using namespace std;void insertionSort(vector<int>& arr){ for(int i = 1; i < arr.size(); ++i){ for(int j = i; j >原创 2017-08-24 14:20:50 · 159 阅读 · 0 评论 -
归并排序
归并排序:用递归来写 直接上代码#include <iostream>#include <vector>using namespace std;// 将[l,mid] [mid+1,r]两段合并并在arr数组上直接更改void merge(vector<int>& arr, int l, int mid, int r){ // 将[l,r]段的值用临时变量存储,长度是r-l+1原创 2017-08-24 15:06:47 · 186 阅读 · 0 评论 -
堆
普通队列和优先队列 普通队列:先进先出,后进后出 优先队列:出队顺序和入队顺序无关,和优先级相关优先队列主要是处理数据是动态变化的场景,比如以下应用:操作系统动态执行任务,游戏AI视野范围内选择敌人攻击等再比如在100万个元素中选出前100名,即N个元素中选出前M个元素排序时间复杂度:NlogN 优先队列时间复杂度:NlogM 使用堆这种数据结构能够实现一个优先队列。最大堆定义: 1. 堆原创 2017-08-24 15:25:11 · 205 阅读 · 0 评论