排序算法【归并排序】

news2024/11/13 12:40:48

一、归并排序算法的原理

        如下面数组所示进行归并排序。

        对左半部分进行排序操作。

        对左半部分进行归并操作。

二、归并排序

#include <stdio.h>
#include "test.h"


/* 归并排序法
 * @arr:数组的首地址指针
 * @begin:需要排序数组的起始序号
 * @len:数组的长度
 */
void merge_sort(int* arr, int begin, int len)
{
	int* buff = (int*)malloc(sizeof(int)*len);   //定义数组空间,用于存放排放好的数据
	if (len - begin <= 1)          //递归的退出条件
		return;
	int mid = (len + begin) / 2;   //去中间值
	merge_sort(arr, begin, mid);   //数组中间值左半部分递归排序
	merge_sort(arr, mid, len);     //数组中间值右半部分递归排序

	int x1 = begin, x2 = mid, k=0;
	while (x1 < mid || x2 < len)
	{
		//(x2 == len)是判断右半部分越界,加上 (x1 < mid) 可以判断左半部分越界
		//(arr[x1] <= arr[x2])左右两边数组的比较,比较之后放在buff中
		if ((x2 == len) || ((x1 < mid) && (arr[x1] <= arr[x2])))    
		{
			buff[k++] = arr[x1++];
		}
		else
		{
			buff[k++] = arr[x2++];
		}
	}
	//将排序号的buff拷贝到原来的数组中
	for (int i = begin; i < len; i++)
	{
		arr[i] = buff[i];
	}
	free(buff);
	return;
}


void main()
{
	int* arr = CreateArray(10000);
	//TEST_MY(selection_sort, arr, 10000);
	TEST_MY(merge_sort, arr, 10000);
	/*unguarded_insert_sort(arr, 0, 10000, 1);*/
	//printf("data:%d, %d, %d, %d\r\n", arr[0], arr[1], arr[2], arr[3]);
	free(arr);
	return;
}

运行的结果如下所示:

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

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

相关文章

微信小程序保存图片到相册

申请权限 代码如下 wx.downloadFile({url: image, //仅为示例&#xff0c;并非真实的资源success(res) {// 只要服务器有响应数据&#xff0c;就会把响应内容写入文件并进入 success 回调&#xff0c;业务需要自行判断是否下载到了想要的内容if (res.statusCode 200) {consol…

SpringBoot-04--整合登录注册动态验证码

文章目录 效果展示1.导入maven坐标2.编写代码生成一个验证码图片3.前端如何拿到验证码4. 后端生成验证码5前端代码 效果展示 效果&#xff0c;每次进入页面展现出来不同的验证码。 技术 使用别人已经写好的验证码生成器&#xff0c;生成图片&#xff0c;转为Base64编码&#x…

IndexError: list index out of range | 列表索引超出范围完美解决方法

IndexError: list index out of range &#x1f4c9; | 列表索引超出范围完美解决方法 IndexError: list index out of range &#x1f4c9; | 列表索引超出范围完美解决方法摘要 &#x1f4c4;引言 &#x1f680; 什么是 IndexError: list index out of range&#xff1f;&…

论文翻译:Jailbroken: How Does LLM Safety Training Fail?

越狱&#xff1a;LLM安全训练为何失败&#xff1f; 文章目录 越狱&#xff1a;LLM安全训练为何失败&#xff1f;摘要1 引言1.1 相关工作 2 背景&#xff1a;安全训练的语言模型和越狱攻击2.1 对受限行为的越狱攻击2.2 评估安全训练的语言模型 3 失败模式&#xff1a;目标冲突和…

自然语言处理工程师的薪资待遇高吗?工作职责是什么呢?

自然语言处理&#xff0c;通常称为NLP&#xff0c;是计算机科学、人工智能和语言学的交叉领域&#xff0c;侧重于使计算机理解、解释并生成人类语言。在分析海量文本数据和开发可处理文本数据系统方面&#xff0c;NLP工程师发挥着至关重要的作用&#xff0c;这些数据可用于搜索…

Fast API + LangServe快速搭建 LLM 后台

如果快速搭建一个 LLM 后台 API&#xff0c;使前端可以快速接入 LLM API。LangChain 或者 LlamaIndex 架构都可以快速集成各种大语言模型&#xff0c;本文将讲述如何通过 Fast API LangServe 快速的搭建一个后台 Rest API 服务。LLM 这些框架现在主打一个就是快速&#xff0c;…

网络状态码都是怎么回事,怎么监测状态码

一、状态码概览 HTTP状态码&#xff0c;作为HTTP协议中不可或缺的一部分&#xff0c;是服务器对客户端请求处理结果的直观反馈。它们由三位数字构成&#xff0c;蕴含着丰富的信息&#xff1a;首位数字定义了响应的大类&#xff0c;后两位则进一步细化了具体状态或错误类型。主…

13 Listbox 组件

13 Listbox 组件 Tkinter 的 Listbox 组件是一个用于显示列表项的控件&#xff0c;用户可以从中选择一个或多个项目。以下是对 Listbox 组件的详细说明和一个使用案例。 Listbox 组件属性 基本属性 width: 控件的宽度&#xff0c;通常以字符数为单位。height: 控件的高度&a…

【C++】String常见函数用法

一、string类对象的常见构造 我们可采取以下的方式进行构造&#xff0c;以下是常用的接口&#xff1a; //生成空字符串 string; //拷贝构造函数 string(const string& str); //用C-string来构造string类对象 string(const char* s); //string类对象中包含n个字符c strin…

C++ 之网络编程基础复习总结

基础 IP 地址可以在网络环境中唯一标识一台主机。 端口号可以在主机中唯一标识一个进程。 所以在网络环境中唯一标识一个进程可以使用 IP 地址与端口号 Port 。 字节序 TCP/IP协议规定&#xff0c;网络数据流应采用大端字节序。 大端&#xff1a;低地址存高位&#xff0c…

FastCopy文件快速复制v5.7.15

软件介绍 FastCopy文件快速复制工具。Windows平台上最快的文件复制、删除软件&#xff01;功能强劲&#xff0c;性能优越&#xff01;它是源于日本的高效文件复制加速软件&#xff0c;支持拖拽操作&#xff0c;三种不同HDD模式&#xff1b;支持通配符&#xff0c;任务管理/命令…

XSS项目实战

目录 一、项目来源 二、实战操作 EASY 1 2 3 4 5 6 7 8 一、项目来源 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 二、实战操作 EASY 1 1.Easy -1 2.题目要求及源码 Difficulty is Easy.Pop an alert(1337) on sandbox.pwnfunction.com.No …

基于STM32开发的智能植物浇水系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化土壤湿度检测与浇水控制显示与状态指示Wi-Fi通信与远程监控应用场景 家庭植物自动浇水农业智能灌溉系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能植物浇水系统通过集…

学习记录第二十九天

信号量————来描述可使用资源的个数 信号量&#xff08;Semaphore&#xff09;是一种用于控制多个进程或线程对共享资源访问的同步机制。在C语言中&#xff0c;通常我们会使用POSIX线程&#xff08;pthread&#xff09;库来实现信号量的操作 信号量有两个主要操作&#xf…

【学习总结】JVM篇

JVM JVM基础知识 主力机型 HotSpot VM HotSpot虚拟机时OpenJDK和OracleJDK中默认的Java虚拟机。它最初并非由Sun公司所开发&#xff0c;而是由一家名为“Longview Technologies”的小公司设计。Sun公司注意到这款虚拟机在即时编译等多个方面有着优秀的理念和实际成果&#…

【Redis】字符串数据类型深入解析与应用实践

目录 String 字符串常⻅命令计数命令其他命令命令⼩结内部编码典型使⽤场景 String 字符串 字符串类型是 Redis 最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a;1&#xff09;⾸先 Redis 中所有的键的类型都是字符串类型&#xff0c;⽽且其他⼏种数据结构也都…

牙科就诊管理系统--论文pf

TOC springboot399牙科就诊管理系统--论文pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;…

企业考勤管理神器:9款精选软件推荐

本文将介绍9款考勤管理软件&#xff1a;Moka、超人HR、慧点、云易通、麦勤通、TeKard考勤管理系统、Toggl Track、ZoomShift、Kronos Workforce Ready。 选择合适的考勤管理软件对企业来说可不是件小事。面对市场上琳琅满目的工具&#xff0c;选错了不仅浪费时间和金钱&#xf…

【二分查找】--- 初阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Joureny 上篇我们讲解了关于二分的朴素模板和边界模板&#xff0c;本篇博客我们试着运用这些模板。 &#x1f3e0; 搜索插入位置 &#x1f4cc; 题目…

如何使用和配置 AWS CLI 环境变量?

欢迎来到雲闪世界。环境变量在配置和保护应用程序方面起着至关重要的作用&#xff0c;在使用 AWS CLI&#xff08;命令行界面&#xff09;时&#xff0c;它们的使用尤其重要。在这篇博客文章中&#xff0c;我们将深入探讨环境变量的世界&#xff0c;探索它们的用途、它们在 AWS…