归并排序和计数排序

计数排序

计数排序是一种非比较排序。

count_sort

还会用到相对大小。

节省空间。

前提是遍历数组找到max和min

从而进一步确定range。

然后将数在数组中的相对位置+min对其进行输出。

void count_sort(int* a, int n)
{
	int max = a[0], min = a[0],cnt=0;
	for (int i = 0; i < n; ++i)
	{
		if (a[i] > max)
		{
			max = a[i];
		}
		if (a[i] < min)
		{
			min = a[i];
		}
	}
	int range = max - min + 1;
	int* count = new int[range];
	memset(count, 0, sizeof(int) * range);
	for (int i = 0; i < n; ++i)
	{
		count[a[i] - min]++;
	}
	for (int j = 0; j < range; ++j)
	{
		while (count[j]--)
		{
			a[cnt++] = j + min;
		}
	}
	delete[] count;
}

归并排序

void _merge_sort(int* a, int left,int right,int *tmp)
{
	if (left >= right)
	{
		return;
	}
	//[left,right]
	//[left,mid] [mid+1,right]
	int mid = (left + right) >> 1;
	_merge_sort(a, left, mid, tmp);
	_merge_sort(a, mid + 1, right, tmp);
	int begin1 = left, end1 = mid;
	int begin2 = mid + 1, end2 = right;
	int index = left;//
	while (begin1 <= end1 && begin2 <= end2)
	{
		if (a[begin1] < a[begin2])
		{
			tmp[index++] = a[begin1++];
		}
		else
		{
			tmp[index++] = a[begin2++];
		}
	}
	while (begin1 <= end1)
	{
		tmp[index++] = a[begin1++];
	}
	while (begin2 <= end2)
	{
		tmp[index++] = a[begin2++];
	}
	for (int i = left; i <= right; ++i)
	{
		a[i] = tmp[i];
	}
}
void merge_sort(int* a, int n)
{
	int* tmp = new int[n];
	_merge_sort(a, 0, n - 1, tmp);
	delete[] tmp;
}

归并排序的核心是其子函数。

通过子函数对其区间进行递归。

左右区间中只有一个数时进行归并。

类似于归并两个有序数组。

归并排序也可以通过非递归实现。

实现是需要注意对区间进行更正。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

漂亮的个人主页HTML源码

漂亮的个人主页HTML源码&#xff0c;页面简约&#xff0c;一个卡片式的风格介绍&#xff0c;喜欢的朋友们可以拿去研究 源码下载 漂亮的个人主页HTML源码

TCP挥手中TIME_WAIT存在的原因

四次挥手的一般过程如图所示&#xff1a; 在客户端收到FIN结束报文的时候不是立刻进入CLOSED状态&#xff0c;而是进入TIME_WAIT状态&#xff0c;一般等2MLS后进入关闭状态。 原因&#xff1a; 1.可靠地终止 TCP 连接。 2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。 …

【CSDN云VS腾讯云】要不然怎么说CSDN开发云是打工人和学生党的福音呢?

&#x1f341;作者简介&#xff1a;&#x1f3c5;云计算领域优质创作者&#x1f3c5;新星计划第三季python赛道TOP1&#x1f3c5; 阿里云ACE认证高级工程师&#x1f3c5; ✒️个人主页&#xff1a;小鹏linux &#x1f48a;个人社区&#xff1a;小鹏linux&#xff08;个人社区&a…

Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo

概述 本文探讨 Wails 框架的使用&#xff0c;从搭建环境到开发&#xff0c;再到最终的构建打包&#xff0c;本项目源码 GitHub 地址&#xff1a;https://github.com/mazeyqian/go-run-wechat-demo 前言 Wails 是一个跨平台桌面应用开发框架&#xff0c;他允许开发者利用 Go …

ElasticSearch分词检索

1. 倒排索引&#xff1a;表示一种数据结构&#xff0c;分词词条与文档id集合的隐射关系 2. 它跟关系型数据库是一种互补的关系&#xff0c;因为关系型数据库支持事务操作&#xff0c;满足ACID原则 #ik分词器下载 https://github.com/infinilabs/analysis-ik/releases POST /_a…

前端学习之DOM编程-案例div移动

这个案例是当你的鼠标按压下去后&#xff0c;div跟着你的鼠标移动而移动&#xff0c;当你的鼠标抬起后&#xff0c;div不随着鼠标移动而移动。类似于电脑移动应用图标的感觉。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

《Java面试自救指南》(专题四)Java基础

文章目录 有序集合有哪些?线程安全的集合有哪些&#xff1f;HashMap底层原理ConcurrentHashMap的底层数据结构ArrayList底层原理&#xff0c;ArrayList和Vector/LinkedList的区别String&#xff0c;StringBuffer&#xff0c;StringBuilder的区别 扩展&#xff1a;String不可变…

【THM】Exploit Vulnerabilities(利用漏洞)-

介绍 在这个房间里,我们将讨论一些识别漏洞的方法,并结合我们的研究技能来了解这些漏洞是如何被滥用的。 此外,您还会发现一些公开可用的资源,这些资源是您在执行漏洞研究和利用时的技能和工具的重要补充。然后,您将在房间的最后将所有这些应用到实际挑战中。 自动化与…

2021-2023年全国地表水水质监测数据集

1.监测范围 国家地表水水质自动监测网水质自动监测站。 2.监测项目监测项目为国家水质自动监测站配备的监测指标&#xff0c;主要包括五参数(水温、pH、溶解氧、电导率和浊度)、氨氮、高锰酸盐指数、总氮、总磷&#xff0c;部分水站增测总有机碳、叶绿素a、藻密度、VOCs、生物…

Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

正则表达式实战-腾讯新闻 需求&#xff1a; 使用正则获取腾讯新闻标题内容 网站&#xff1a;https://sports.qq.com/ 代码&#xff1a; import reimport requests from fake_useragent import UserAgenturl https://sports.qq.com/ # 构建请求头信息 headers {User-Agent:…

Python爬取公众号封面图(零基础也能看懂)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

#{} 和 ${}区别

1、参数是Integer类型时候没区别&#xff08;#是预编译SQL&#xff0c;$是即时SQL&#xff09; 2、当参数是String类型时&#xff0c;就会出错了 &#xff08;1&#xff09;这是$的报错信息&#xff0c;因为我们的参数admin并没有加引号所以不满足字符串条件 (2)正确的SQL &am…

【最大值线段树】【二分查找】2286. 以组为单位订音乐会的门票

本文涉及知识点 线段树 最大值线段树 二分查找算法合集 LeetCode2286. 以组为单位订音乐会的门票 一个音乐会总共有 n 排座位&#xff0c;编号从 0 到 n - 1 &#xff0c;每一排有 m 个座椅&#xff0c;编号为 0 到 m - 1 。你需要设计一个买票系统&#xff0c;针对以下情况…

Win10 下 git error unable to create file Invalid argument 踩坑实录

原始解决方案参看&#xff1a;https://stackoverflow.com/questions/26097568/git-pull-error-unable-to-create-file-invalid-argument 本问题解决于 2024-02-18&#xff0c;使用 git 版本 2.28.0.windows.1 解决方案 看 Git 抛出的出错的具体信息&#xff0c;比如如下都来自…

星系炸弹(蓝桥杯真题填空题)

import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class BombExplosionDate { public static void main(String[] args) { // 定义贝塔炸弹的放置日期和定时天数 LocalDate placementDate LocalDate.of(2014, 11, 9); int daysToExplode 10…

【攻防世界】FlatScience

dirsearch 扫描发现四个文件 在login.php 中发现 输入 http://61.147.171.105:61912/login.php/?debug 发现源码 <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3(../fancy.db);$res $db->query(…

唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码

唯美首页纯静态html5引导页源码&#xff0c;格子化win8风格官方引导页面源码&#xff0c;喜欢的朋友可以拿去使用 源码下载 唯美首页纯静态html5引导页源码

【Ubuntu20.04.6】VMWare Station 17安装Ubuntu20.04.6虚拟机系统

步骤1&#xff1a;下载Ubuntu20.04.6镜像ISO文件 Ubuntu20.04.6镜像ISO文件下载&#xff1a; https://mirrors.ustc.edu.cn/ubuntu-releases/20.04/ 步骤2&#xff1a;下载安装VMWare Station 17 下载和安装教程&#xff1a; https://blog.csdn.net/u012621175/article/deta…

C#使用Selenium驱动Chrome浏览器

1.Selenium库依赖安装 Selenium WebDriver是Selenium项目的一部分&#xff0c;用于模拟用户在Web应用程序中的交互操作。它支持多种浏览器&#xff0c;如Chrome、Firefox、IE等&#xff0c;且与各种编程语言&#xff08;如Java、Python、C#等&#xff09;兼容&#xff0c;具有…

JAVA八股--redis

JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log&#xff08;没掌握MyISAM 和 InnoDB 有什么区别&#xff1f; 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…