笔记整理
文章平均质量分 81
大司马学编程
这个作者很懒,什么都没留下…
展开
-
二分搜索树及基本操作(c++代码实现)
二分搜索树二分搜索树通常用于实现查找表(字典数据结构key-value)查找插入删除普通数组O(n)O(n)O(n)顺序数组O(logn)O(n)O(n)二分搜索树O(logn)O(logn)O(logn)二分搜索树的优势:能够高效、动态维护数据,还可以很方便的回答很多数据关系的问题,比如min、max、floor、ceil、ran...原创 2020-04-20 23:26:48 · 1002 阅读 · 1 评论 -
二分查找法及变种(c++代码实现)
查找问题是计算机中非常重要的基础问题,本篇主要针对二分搜索树进行深入的探讨。首先我们从最简单的二分查找法开始介绍。二分查找法对于有序数列,才能使用二分查找法(先排序!)[分析]例如,在有序数组中查找元素a首先,找到数组的中间元素v由于数组的有序性,所以元素v把数组分为了两个部分通过比较待查找元素a和中间元素v的关系,缩短查找范围。若a==v 返回v若a>v 则在>...原创 2020-04-18 23:39:04 · 452 阅读 · 0 评论 -
索引堆(c++代码实现)
索引堆[为什么要引入索引堆?]给出一个数组,构建如下树形结构通过heappify操作,构建一个堆当堆构建完成后,我们无法通过索引获取到原来元素所在位置,所以后续很难通过索引改变节点的值。所以我们引入索引堆[什么是索引堆?]将数组中的元素和索引分开存储,而真正表现成堆的是索引数组通过Index-heapify操作,构建索引堆,构建完成后,索引堆如下。通过构建堆前后进行对比,我...原创 2020-04-17 23:19:44 · 300 阅读 · 0 评论 -
堆和堆排序(c++代码实现)
1、堆和优先队列优先队列优先队列是一种特殊的队列,与普通队列相比,普通队列的特点是“先进先出,后进后出”而优先队列的出对顺序和如对顺序无关,与对内元素的优先级有关。优先队列的主要操作:入队、出队(出队优先级最高的元素)优先队列主要操作的实现方式入队出队普通数组O(1)O(n)顺序数组O(n)O(1)堆O(logn)O(logn)从表中可...原创 2020-04-15 22:52:28 · 911 阅读 · 1 评论 -
快速排序进阶优化之双路快排与三路快排(c++代码实现)
上一期博客总结了快速排序与快速排序的一些简单的优化方式,本期整理更高级的快速排序优化方式,分别为双路快排与三路快排双路快排[优化场景]对于取值范围很小,数据量又较大——即数组中存在非常多的重复元素。[分析]//partiton操作template<typename T>int__partition(int arr[], int l, int r){ swap(arr[r...原创 2020-04-13 23:30:18 · 566 阅读 · 0 评论 -
O(nlogn)的排序算法及基础优化(c++代码实现)
O(nlogn)的排序算法1、归并排序[算法思想]首先将数组进行两两分组,然后想办法把左边的数组排序,再把右边的数组排序,最后再归并起来(递归)[归并过程]开辟同样大小的临时空间,设置三个索引i,j,ki表示左边数组正在考虑元素的索引j表示右边数组正在考虑元素的索引k表示相比较后元素应该放到的位置[代码实现]//用户调用的函数template<typename T&...原创 2020-04-12 23:04:43 · 629 阅读 · 4 评论 -
O(n*n)的排序算法
今天学习了慕课网liuyubobobo老师的课程[https://coding.imooc.com/class/71.html],现把课程笔记整理如下,希望对各位能有所帮助原创 2020-04-10 23:49:47 · 488 阅读 · 0 评论