随笔分类 - 数据结构
摘要://1.计算度为2 度为1 度为0的结点个数 void Count(BiTree bt) { if(bt) { if(bt->lchild && bt->rchild) n2++; else if(bt->lchild && !bt->rchild || bt->rchild && !bt->lch
阅读全文
摘要:结构: typedef int ElemType; typedef struct LNode { ElemType val; struct LNode *next; }*LinkedList; //将一个没有头结点的结点数据为字符的单链表,分解成还有字母字符、数字字符和其他字符的三个带头节点的循环链
阅读全文
摘要:堆排序属于选择排序 选择排序的基本思想: 每一趟(第i趟)在后面n-i+1个待排序的元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第 n-1趟做完,待排序元素只剩下1个,就不用再选了。 堆排序适合关键字较多的情况(n>1000) 比如:在1亿个数中选出前100个最大值? 首先使用一个大
阅读全文
摘要:冒泡排序属于交换排序 从前往后(从后往前)两两比较交换,第一趟可以将最小的元素交换到待排序的第一个位置(或将最大的元素交换到待排序的最后一个位置). 下一趟排序之前排好序的元素就不用再参与比较了. 最坏情况下时间复杂度是O(\(n^2\)),最好的情况是o(n),平均时间复杂度是O(\(n^2\))
阅读全文
摘要:快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想 1.基本实现 1、从数列中取出一个数作为基准数(枢轴,pivot)。 2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。 3、再对左右的子区间重复第二步的划分操作,直至每
阅读全文
摘要:选择排序即简单选择排序 最坏的时间复杂度是O(\(n^2\)),最好的时间复杂度也是O(\(n^2\)),平均时间复杂度是O(\(n^2\)) 没有用到额外的空间 所以空间复杂度是O(1) 选择排序是不稳定的 void selectionsort(vector<int> &a) { for(int
阅读全文
摘要:希尔排序 空间复杂度为O(1) 时间复杂度为最坏情况为O(\(n^{2}\)),最好情况是O(\(n^{1.3}\)),平均为O(nlogn) 是不稳定的 #include<iostream> using namespace std; #include<vector> typedef int Ele
阅读全文
摘要:折半插入排序 空间复杂度O(1) 时间复杂度最好情况是O(nlogn) 最坏情况是O(n²),平均为O(n²) 与直接插入排序相比,折半插入排序在查找插入位置上面所花的时间大大减少 比较次数减少了,但是移动次数没变 对于数据量不大的排序表,能表现很好的性能 稳定的排序方法 #include<iost
阅读全文
摘要:直接插入排序 空间复杂度O(1) 时间复杂度最好情况是O(n),最坏情况是O(n²),平均情况是O(n²) 是稳定的内排序算法 从后往前比较,把后面的元素作为哨兵 #include<iostream> using namespace std; #include<vector> void Insert
阅读全文
摘要:#include<iostream> using namespace std; typedef int ElemType; #define MAXSIZE 5 typedef struct { ElemType data[MAXSIZE]; int front; int rear; }SqQueue
阅读全文
摘要:#include<iostream> using namespace std; #include<stack> #include<malloc.h> #include<vector> typedef int ElemType; #define MaxSize 100 typedef struct B
阅读全文
posted @ 2020-06-03 21:10
Akmf's_blog
摘要:```#include #includeusing namespace std;#define Elemtype int#define Maxsize 50//带有头部节点的链栈typedef struct LinkNode{ Elemtype data; struct LinkNode *next;}*LiStack;//初始化void InitStack(LiStack &L){ ...
阅读全文

浙公网安备 33010602011771号