算法与数据结构
文章平均质量分 54
算法与数据结构
lutsang
这个作者很懒,什么都没留下…
展开
-
冒泡排序
冒泡排序1 基本思想以从小到大排序为例,冒泡排序检查当前位置元素与其后面相邻位置元素的大小,如果小于后面的元素,则将这两个元素交换,重复执行交换的过程直到序列有序。2 代码实现#include <iostream>using namespace std;void BubbleSort(int* arr, int n);void Swap(int& a, int& b);void Print(int* arr, int n);void Swap(原创 2021-05-24 19:31:14 · 120 阅读 · 0 评论 -
堆排序
堆排序1 堆的定义堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。假定堆顶(即二叉树的根节点)的编号为 0,按照层序遍历的方式给堆的每个节点进行编号,第 i 个节点的左右孩子节点(如果有的话)的编号分别是 2 * i 和 2 * i + 1;同样,第 i 个节点的父节点(如果有的话)的编号是 i / 2。2 堆的存储结构以大顶堆为例,介绍两种堆的存储方式。2.1原创 2021-05-23 17:11:02 · 476 阅读 · 0 评论 -
摩尔投票
摩尔投票解决的问题在任意多的候选人中选择票数最多的那个算法需要满足的条件1. 如果只选出一个票数最多的人,则其票数需超过 1 / 2 的票数2. 如果至多选两个代表,票数至少要超过 1 / 3 的票数3. 如果至多选m个代表,那他们的票数至少要超过 1 / (m+1)一个例题一个包含 N 个元素的整数数组 nums 中存在一个元素的出现次数 t 超过元素总个数的一半(即 t > N/2)。请找出这个元素例:nums = [6,2,5,3,4,2,2,2,2,5],输原创 2021-05-15 15:26:47 · 76 阅读 · 0 评论 -
线段树(一)
线段树(一)线段树的定义线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。——引自百度百科其实就是把一个区间(线段或数组)按照某种原则划分为若干个小区间,每个小区间是线段树的一个节点。为什么要线段树这种数据结构首先思考这样一个问题:给定一个数组nums,数组nums里面包含N个整数,现有m次询问,每次询问区间[L, R]之间的数字之和。思路一:每次遍历数组nums中从L到R的元素,然后累加。时间复杂度为O(N*m)。思路二:另原创 2021-05-14 00:54:17 · 136 阅读 · 0 评论