当前位置: 首页 > news >正文

考研要求掌握C语言(归并排序)

归并排序考啥?

在考研中归并排序只出在选择题,理解原理很重要

且在考研中考两两归并,还是比较简单的

归并排序原理

就是每次分一半,直到每一半只含有一个或不能再分时,一半一半的进行排序,最终合并两个有序的数组

9001f34b71b8460cbf4ba9a18b0c5890.png

代码实战

//核心代码
void merge(int nums[],int low,int mid,int high)
{//合并数组两个有序的数组static int tmp[N];//创建一个和元数组一样大的数组进行合并,//加上static关键字是为了在递归过程中只创建一次for(int t=low;t<=high;t++){tmp[t]=nums[t];//把当前low到high数据全部拷贝在临时数组中}//这里都是下标,所以可以等于int i,j,k;//注意k是合并数组的起始下标即low,千万别错for(k=low,i=low,j=mid+1;i<=mid && j<=high; k++){if(tmp[i]<=tmp[j]){nums[k]=tmp[i++];}else{nums[k]=tmp[j++];}}//判断单独多余的那个,因为不知道哪一半数据是比另一半多的//所以要都判断while(i<=mid){nums[k++]=tmp[i++];}while(j<=high){nums[k++]=tmp[j++];}}void merge_sort(int nums[],int low,int high)
{if(low < high){int mid = (low+high)/2;merge_sort(nums,low,mid);merge_sort(nums,mid+1,high);merge(nums,low,mid,high);}
}

 可运行代码

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#define N 10
void swap(int &a,int &b)
{int tmp=a;a=b;b=tmp;
}void rangnums(int nums[],int len)
{srand(time(NULL));//初始化数组printf("初始化数组:");for(int i=0;i<len;i++){nums[i]=rand()%100+1;printf("%d ",nums[i]);}puts("");
}void print(int a[],int len)
{for(int i=0;i<len;i++){printf("%d ",a[i]);}puts("");
}void merge(int nums[],int low,int mid,int high)
{//合并数组两个有序的数组static int tmp[N];//创建一个和元数组一样大的数组进行合并,//加上static关键字是为了在递归过程中只创建一次for(int t=low;t<=high;t++){tmp[t]=nums[t];//把当前low到high数据全部拷贝在临时数组中}//这里都是下标,所以可以等于int i,j,k;//注意k是合并数组的起始下标即low,千万别错for(k=low,i=low,j=mid+1;i<=mid && j<=high; k++){if(tmp[i]<=tmp[j]){nums[k]=tmp[i++];}else{nums[k]=tmp[j++];}}//判断单独多余的那个,因为不知道哪一半数据是比另一半多的//所以要都判断while(i<=mid){nums[k++]=tmp[i++];}while(j<=high){nums[k++]=tmp[j++];}}void merge_sort(int nums[],int low,int high)
{if(low < high){int mid = (low+high)/2;merge_sort(nums,low,mid);merge_sort(nums,mid+1,high);merge(nums,low,mid,high);}
}int main()
{int a[N]={92 ,79 ,49, 59, 86 ,38, 94, 64, 92, 3};// rangnums(a,10);merge_sort(a,0,9);print(a,10);}

 

时间复杂度

O(nlog2n)

空间复杂度

o(n)

 

相关文章:

考研要求掌握C语言(归并排序)

归并排序考啥&#xff1f; 在考研中归并排序只出在选择题&#xff0c;理解原理很重要 且在考研中考两两归并&#xff0c;还是比较简单的 归并排序原理 就是每次分一半&#xff0c;直到每一半只含有一个或不能再分时&#xff0c;一半一半的进行排序&#xff0c;最终合并两个…...

Spring Authorization Server:实现OAuth2认证服务

Spring Authorization Server为构建安全的SpringBoot应用提供了一系列解决方案,本节课程我们将结合OAuth2来实现认证服务,该认证服务将支持常用的OAuth2授权模式和刷新Token。 Spring Authorization Server简介 Spring Authorization Server是一个安全框架,它提供了OAuth 2.…...

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…...

ScrumMaster认证机构及CSM、PSM、RSM价值解析

近十年Scrum在国内备受关注&#xff0c;成为一种最流行的现代敏捷工作方式。ScrumMaster这一独特的角色&#xff0c;在企业内部推动Scrum落地的过程中越来越重要。各种ScrumMaster认证课程也蜂拥而至&#xff0c;甚至鱼目混珠。 我们为大家梳理了目前市面上出现的ScrumMaster认…...

借助 Pause 容器调试 Pod

借助 Pause 容器调试 Pod 在 K8S 中&#xff0c;Pod 是最核心、最基础的资源对象&#xff0c;也是 Kubernetes 中调度最小单元。在介绍 Pause 容器之前需要先说明下 Pod 与容器的关系来理解为什么需要 Pause 容器来帮助调试 1. Pod 与 容器的关系 Pod 是一个抽象的逻辑概念&…...

PostgreSQL 开启密码验证插件

我们知道在数据安全和等保要求中&#xff0c;用户的密码复杂度需要满足一定的条件&#xff0c;那么在 PostgreSQL 数据库中如何保证创建的用户的密码满足这些要求呢。 [rootlocalhost ~]# su - postgres [postgreslocalhost ~]$ cd /usr/local/pgsql-12.8/data/ [postgresloca…...

Go 语言已立足主流,编程语言排行榜24 年 11 月

Go语言概述 Go语言&#xff0c;简称Golang&#xff0c;是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计&#xff0c;并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标&#xff0c;…...

flutter下拉刷新上拉加载的简单实现方式三

使用 CustomScrollView 结合 SliverList 实现了一个支持下拉刷新和上拉加载更多功能的滚动列表&#xff0c;对下面代码进行解析学习。 import dart:math;import package:flutter/material.dart;import custom_pull/gsy_refresh_sliver.dart; import package:flutter/cupertino…...

【C++ 20进阶(2):属性 Attribute】

【C 20进阶&#xff08;2&#xff09;&#xff1a;属性 Attribute】 原文&#xff1a;https://blog.csdn.net/weixin_44259356/article/details/143663492 引言 本篇文章为系列文章将着重介绍C20新特性&#xff0c;一是希望可以和大家交流分享&#xff0c;二是也便于自己巩固…...

【系统面试篇】其他相关题目——虚拟内存、局部性原理、分页、分块、页面置换算法

目录 一、相关问题 1. 什么是虚拟内存&#xff1f;为什么需要虚拟内存&#xff1f; &#xff08;1&#xff09;内存扩展 &#xff08;2&#xff09;内存隔离 &#xff08;3&#xff09;物理内存管理 &#xff08;4&#xff09;页面交换 &#xff08;5&#xff09;内存映…...

力扣617:合并二叉树

给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重叠&#…...

软件设计师 - 第1章 计算机网络概论

计算机系统硬件基本组成 输入设备&#xff1a;键盘&#xff0c;鼠标输出设备&#xff1a;显示器&#xff0c;打印机...存储器&#xff1a;主存储器&#xff0c;如内存&#xff1b;辅助存储器&#xff0c;如外存运算器&#xff1a;与控制器一同集成在CPU中控制器&#xff1a;与…...

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下&#xff0c;记录和管理车险保单信息是一项必不可少的任务。然而&#xff0c;面对数量庞大的电子保单&#xff0c;传统的手工录入方式显得尤为低效——它不仅消耗大量时间&#xff0c;而且容易出现错误&#xff0c;这不仅影响了用户的满意度&#xf…...

Jmeter中的监听器(一)

监听器 1--查看结果树 用途 调试测试计划&#xff1a;查看每个请求的详细信息&#xff0c;帮助调试和修正测试计划。分析响应数据&#xff1a;查看服务器返回的响应数据&#xff0c;验证请求是否成功。检查错误&#xff1a;识别和分析请求失败的原因。 配置步骤 添加查看结果…...

C++ 标准库 std::vector 的介绍

std::vector 是 C 标准库中的一个动态数组容器&#xff0c;它提供了多种成员函数来管理其内部存储的元素。以下是一些常用的 std::vector 成员函数的介绍&#xff1a; 构造函数和析构函数 vector(): 默认构造函数。vector(size_type n): 构造一个包含 n 个元素的向量&#xf…...

鸿蒙开发-装饰器@Link问题

正常示例 class Parent {public count: number;constructor( count: number) {this.count count;} } Entry Component struct TestPage {State parent: Parent new Parent( 11)build() {Column() {SubComponent({ parent: this.parent })}.height(100%)} } Component struct…...

CTFhub靶场RCE学习

靶场 eval执行 <?php if (isset($_REQUEST[cmd])) {eval($_REQUEST["cmd"]); } else {highlight_file(__FILE__); } ?> PHP代码显示&#xff0c;要求将命令赋值给cmd然后执行 先查看一下根目录文件 ?cmdsystem("ls");&#xff01;切记最后的分…...

一文3000字从0到1带你进行Mock测试(建议收藏)

​什么是mock&#xff1f; ​mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为&#xff0c;很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock&#xff1f; 之所以使用mock测试&#xff0c;是因…...

数据结构 ——— 链式二叉树的销毁(释放)

目录 链式二叉树示意图 手搓一个链式二叉树 代码实现 示意图 手搓一个链式二叉树 代码演示&#xff1a; // 数据类型 typedef int BTDataType;// 二叉树节点的结构 typedef struct BinaryTreeNode {BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向…...

log4j异常堆栈文件输出

目的&#xff1a;log4j异常堆栈关联到traceId一句话中&#xff0c;方便搜索 1、获取堆栈后一起打印 private void logException(Throwable t, ProceedingJoinPoint joinPoint) {if (this.printErrorStackSys) {StringWriter sw new StringWriter();PrintWriter pw new Print…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...