随笔分类 - 数据结构
摘要:``` //当前先序序列区间为[preL,preR],中序序列区间为[inL,inR],返回根结点地址 node* create(int preL, int preR, int inL, int inR) { if(preL > preR) { return NULL; //先序序列长度小于等于0时,直接返回 } node* root = new node; //新建一个新的结点,用来存放当前二叉
阅读全文
摘要:《算法笔记》中摘取 //选取随机主元,对区间[left, right]进行划分 int randPartition(int A[], int left, int right) { //生成[left, right]内的随机数p int p = (round(1.0 rand() / RAND_MAX
阅读全文
摘要:《算法笔记》中摘取 快速排序是排序算法中平均时间复杂度为 O(nlogn) 的一种算法 思路 1. 调整序列中的元素,使当前序列最左端的元素在调整后满足左侧所有元素均不超过该元素,右侧所有元素均大于该元素 2. 对该元素的左侧和右侧分别递归进行 1 的调整,直到当前调整区间的长度不超过1。 &nbs
阅读全文
摘要:《算法笔记》中摘取 2 路归并排序的非递归写法主要考虑到这一点:每次分组时组内元素个数上线都是2的幂次。于是就可以想到这样的思路:令步长step的初值为2,然后减数组中每个step个元素作为一组,将其内部进行排序(即把左step / 2个元素与右step / 2个元素合并,而若元素个数不超过step
阅读全文
摘要:《算法笔记》中摘取 2 路归并排序的递归写法非常简单,只需要反复将当前区间[left, right]分为两半,对两个子区间[left, mid]与[mid +1, right]分别递归进行归并排序,然后将两个已经有序的合并为有序序列即可。 const int maxn = 100; //将数组A的[
阅读全文