[笔记]数据结构

news2024/12/22 9:32:13

文章目录

  • 堆排序
  • 215 数组中第k个最大元素

堆排序

堆排序方法对于记录数较少的文件并不值得提倡,但对n较大的文件还是有效
运行时间主要耗费在:

  1. 建立初始堆
  2. 调整建立新堆 反复筛选

筛选算法进行的关键字比较次数至多为: 2 ( k − 1 ) 2(k-1) 2(k1)
最坏情况O(nlogn),仅需一个记录大小供交换用的辅助存储空间

堆采用线性表表示
typedef SqList HeapType;
void HeadAdjust(HeapType &H,int s,int m){
	//已知H.r[s..m]中记录关键字除H.r[s].key之外均满足堆的定义
	//本函数调整H.r[s]的关键字,使H.r[s..m]成为一个大顶堆
	//s最大的非叶子节点 
	rc = H.r[s]; //辅助元素记录最大非叶子节点
	for(j=2*s;j<=m;j*=2){//2*s末尾元素
	//沿key较大的孩子结点向下筛选
		if(j<m && LT(H.r[j].key,H.r[j+1].key))++j;
		//j为key较大的记录的下标
		if(!LT(rc.key,H.r[j].key))break;//叶子节点大于等于非叶子节点,不需要调整(大根堆)
		//需要调整,将叶子节点和非叶子节点【已经记录】交换
		H.r[s]=H.r[j];
		s=j;

	}
	H.r[s]=rc;//插入元素

}//HeadAdjust



void HeadAdjust(int A[],int i,int m){//易懂版本
	A[0]=A[j];
		for(j=2*i;j<=m;j*=2){//2*s末尾元素
	//沿key较大的孩子结点向下筛选
		if(j<m && A[j]<A[j+1])++j;
		//j为key较大的记录的下标
		if(A[0]>=A[j])break;//叶子节点大于等于非叶子节点,不需要调整(大根堆)
		//需要调整,将叶子节点和非叶子节点【已经记录】交换
		A[i]=A[j];
		i=j;
	}
	A[i]=A[0];
}
void HeapSort(HeapType &H){
	//对顺序表H进行排序
	for(i=H.length/2;i>0;--i){
		HeapAdjust(H,i,H.length);
		//把H.r[1...H.length]建成大顶堆
	}
	for(i=H.length;i>1;--i){
		swap(H.r[1],H.r[i]);
		//将堆顶记录和当前未经排序子序列Hr[1...i]中
		//最后一个记录相互交换
		HeapAdjust(H,1,i-1);
		//将H.r[1..i-1]重新调整为大顶堆
	}
}//HeapSort
  最大堆:priority_queue<int, vector<int>, less<int>> maxHeap;

   最小堆:priority_queue<int, vector<int>, greater<int>> minHeap;

   如果使用 priority_queue<int> 创建堆,默认创建的是最大堆;

    最小堆会在一些图算法中应用,比如prim,dijkstra算法等,

链接

在这里插入图片描述

class Solution {
public:
    int mySqrt(int x) {
        if(x<=1)return x;
        int left=1,right=x/2;
        while(true){
            int mid = (left+right)/2;
          if(mid>0&&mid>x/mid)
            right=mid-1;
          else if((mid+1)>x/(mid+1))
            return mid;
          else 
            left=mid+1;  
        }
    }
};

215 数组中第k个最大元素

在这里插入图片描述
方法一:利用快速排序进行划分

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
    
       return divide(nums,0,nums.size()-1,nums.size()-k);
       
    }

    int divide(vector<int>& nums,int left,int right,int k){
      if(left==right)return nums[k];
      int partition = nums[left],i=left-1,j=right+1;
      while(i<j){
        while(nums[++i]<partition);
        while(nums[--j]>partition);
        if(i<j)swap(nums[i],nums[j]);
      }
      if(k<=j)return divide(nums,left,j,k);
      else return divide(nums,j+1,right,k);
        
    }
};



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9.26作业

C 面试题 1,什么是虚函数?什么是纯虚函数? 虚函数&#xff1a;父子类中&#xff0c;在父类中的函数需要在子类中进行重写&#xff0c;重写后父子类空间中使用的都是重写后的函数&#xff0c;该函数就是虚函数&#xff0c;虚函数的声明需要在函数前加virtual。 纯虚函数&…

Trace纳米侦查无人机技术详解

纳米无人机&#xff0c;作为微型无人机的一种&#xff0c;通常指尺寸和重量都非常小的无人机&#xff0c;其重量一般不超过几百克&#xff0c;甚至更小。这类无人机由于体积小、重量轻&#xff0c;具备高度的隐蔽性和灵活性&#xff0c;在军事侦察、环境监测、搜救行动等领域具…

数值计算 --- 平方根倒数快速算法(上)

平方根倒数快速算法(上) --- 向Greg Walsh致敬&#xff01; 写在最前面 --- 一场关于平方根倒数快速算法作者的讨论&#xff1a; 上图中的这段代码出自一个早期的3D游戏<雷神之锤>的源代码&#xff0c;它实现的功能就是计算一个数x的平方根的倒数&#xff1a; 这段代码之…

如何投IEEE论文(Transactions on Cybernetics为例)

文章目录 0. 建议先看看投稿要求1.下载对应的论文模板2.进入提交论文信息的界面3.填写论文中必要的信息3.1 Article Type3.2 Upload Manuscript3.3 Title3.4 Abstract3.5 Authors3.6 Author Details3.7 Math Organizations3.8 Additional Information3.9 Final Review 终审 0. …

计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果

我们写这道题的时候需要俩变量接受&#xff0c;一个总数一个分母&#xff0c;我们发现分母变化是有规律的从1~100循环。 #include<stdio.h> int main() {int i 0;int tag 1;double sum 0.0;for (i 1; i < 101; i){if (i % 2 0){sum sum - 1.0 / i;}else{sum s…

实力!云起无垠荣获“创业邦2024年AIGC创新企业及产品创新”双奖

近日&#xff0c;国际创新生态服务平台创业邦郑重发布 “2024 年 AIGC 创新企业及产品创新榜单”。云起无垠凭借卓越的企业能力与突出的产品创新&#xff0c;成功入选 “2024 年 AIGC 创新企业 100 强” 以及 “2024 年 AIGC 产品创新 100 强”。 本次评选采用内部初审与外部专…

深入分析MySQL事务日志-Undo Log日志

文章目录 InnoDB事务日志-Undo Log日志2.1 Undo Log2.1.1 Undo Log与原子性2.1.2 Undo的存储格式1&#xff09;insert类型Undo Log2&#xff09;delete类型Undo Log3&#xff09;update类型Undo Log 2.1.3 Undo Log的工作原理2.1.4 Undo Log的系统参数2.1.5 Undo Log与Purge线程…

【Linux 报错】vim 保存文件时出现 E45: ‘readonly‘ option is set (add ! to override)

一、错误原因 该错误表明当前你尝试保存的是一个 只读文件&#xff0c;该文件权限设置为只读&#xff0c;具有只读的标识 系统为了防止你意外修改该只读文件&#xff0c;因此会阻止对只读文件的保存&#xff08;他怕你修改了你还保存&#xff0c;破坏了只读属性&#xff09; …

媒界:2025河南台球及配套设施展会3月举办

立足中原&#xff0c;辐射全国&#xff0c;壹肆柒中国国际台球产业博览会3月在郑州盛大举办&#xff1b; 2025中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff08;壹肆柒台球展&#xff09; The 2025 China (Zhengzhou) International Billiards Industry Expo …

2021年的burpsuite安装。

安装burpsuite 很简单的。 1.要有java环境&#xff0c;也就是jdk&#xff0c;并且jdk版本要与burpsuite要对应。&#xff08;如果你的bp安装不起&#xff0c;可能是你的jdk版本不对&#xff09; 2.就是按照我都步骤走就行。 3.下载完文件之后&#xff0c;全程离线操作 说明一下…

spring boot 项目如何使用jasypt加密

1.首先&#xff0c;添加jasypt依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version></dependency> 2.然后winr&#xff0c;cmd调出窗…

Rapid品牌SSL证书通配符单域名申请窍门

RapidSSL最初以FreeSSL的名称引入数字世界&#xff0c;于2003年诞生&#xff0c;扎根于以技术为中心的加利福尼亚州山景城。如今&#xff0c;它是GeoTrust旗下一家值得骄傲的子公司&#xff0c;其战略定位是满足市场对经济高效的SSL证书解决方案的需求。 Rapid属于Geotrust品牌…

Redis篇(初识Redis)

目录 一、数据库 二、NoSQL 三、认识Redis 三、关系数据库与非关系数据库对比 1. 结构化与非结构化 2. 关联和非关联 3. 查询方式 4. 事务 5. 存储方式 6. 扩展性 7. 总结 7.1. 图形梳理 7.2. 表格梳理 7.3. 优缺点 关系型数据库 非关系型数据库 四、再次认识R…

LeetCode142. 环形链表 II(2024秋季每日一题 28)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

C++:STL详解(二)string类的模拟实现

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; &#x1f525;&#x1f525;&#x1f525;&#x1f525;&#x1f525;本文参考文章&…

合同管理中的常见陷阱,你是否也中招了?

在合同管理中&#xff0c;很多企业常常会掉进一些意想不到的“陷阱”。这些问题可能在日常工作中看似无关紧要&#xff0c;但一旦忽视&#xff0c;往往会引发一系列严重的后果。合同信息管理混乱&#xff0c;导致重要条款被遗漏&#xff0c;签署文件时出现纰漏&#xff1f;合同…

Pygame中Sprite实现逃亡游戏4

在《Pygame中Sprite实现逃亡游戏3》中实现了玩家跳跃飞火的效果&#xff0c;接下来通过精灵类的碰撞检测来判断飞火是否击中玩家、飞火是否击中飞龙以及飞龙是否抓住玩家。 1 飞火是否击中玩家的判断 判断飞火是否击中玩家的代码如图1所示。 图1 判断飞火是否击中玩家的代码 …

大数据-144 Apache Kudu 基本概述 数据模型 使用场景

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

企业私有网盘怎么搭建?整理国内外主流 18 家方案厂商

目前市场上主流的企业网盘有360亿方云、坚果云、百度企业网盘、联想企业网盘、燕麦云智能企业云盘、腾讯企业网盘等等。就创立时间和用户量来看&#xff0c;联想企业网盘、360亿方云可以说第一梯队的存在。 企业需要的不仅仅是文档存储、分享和协作的简单管理工具&#xff0c;还…

AI无人直播新标杆,一站式直播解决方案:打造专属舞台!

AI无人直播新标杆&#xff0c;一站式直播解决方案&#xff1a;打造专属舞台&#xff01; 在数字化浪潮的汹涌澎湃中&#xff0c;AI技术正以前所未有的速度渗透至各行各业&#xff0c;其中&#xff0c;直播行业作为数字内容传播的重要阵地&#xff0c;正经历着一场由AI引领的深刻…