基本排序之归并排序

从零开始:Vivado中自定义串口通信IP核的完整实现 本文详细介绍了在Vivado中从零开始实现自定义串口通信IP核的完整流程,包括Verilog核心代码编写、仿真验证、IP核封装与参数化配置技巧。通过AXI-Lite总线实现动态配置,提升FPGA开发效率,适用于各种嵌入式系统通信需求。 阅读详情

今天,再来介绍一种排序方法,归并排序。

什么意思?

把n个长度的线性表看成n个长度为1的有序表,然后,两两归并,也称2-路归并排序。

它的实现有递归形式的,还有非递归形式的。

我这里主要说,非递归形式的算法。

先看代码,我再来解释。

#include<iostream>
using namespace std;
template <class T>
void merge(T p[],int n){
	int m,k,j,low,high,mid;
	T *a;
	a=new T[n];
	m=1;
	while(m<n){
	k=2*m;
	for(j=1;j<=n;j=j+k){
	low=j;high=j+k-1;mid=j+m-1;
	if(high>n) high=n;
	if(high>mid) merg(p,low,mid,high,a);
	}
	m=k;
	}
	delete a;
	return;
}

template <class T>
merg(T p[],int low ,int mid ,int high ,T a[]){
	int i,j,k;
	i=low;j=mid+1;k=low;
	while((i<=mid)&&(j<=high)){
		if(p[i-1]<=p[j-1]){a[k-1]=p[i-1];i=i+1;}
		else
		{a[k-1]=p[j-1];j=j+1;}
		k=k+1;
	}
	if(i<=mid)
		for(j=i;j<=mid;j++)
		{a[k-1]=p[j-1];k=k+1;}
	else
		if(j<=high)
			for(i=j;i<=high;i++)
			{a[k-1]=p[i-1];k=k+1;}
		for(i=low;i<=high;i++)
			p[i-1]=a[i-1];
		return 0;
}
这里有个merge函数,以及merg函数,其中,merge函数就是非递归形式的,归并算法,它的作用干什么?

找到,low,high,以及mid这三个指针的位置。

merg函数就是合并,把2个有序子序列和成大的有序序列,如何合并?

我就举个非常通俗的例子,比如,桌子上放了2堆,有序的数,那么从最最上面,比较,看到谁小,就直接取出,直到有一堆为空,剩下的,直接放过去,这不就排好了

下面给大家附一个,递归算法的地址,有兴趣看看点击打开链接

关于递归的合并,我简单说几句,假如你不理解递归过程,可以这样理解,找到中间的某个位置,调用归并算法整理前半个子序列,调用归并算法整理后半个子序列,然后把它们合并就好了。

但是在调用合并的时候,本身又在调用自己,所以你可以抛开这个过程,等你见多了,你就理解了

PTP(确时间协议,Precision Time Protocol)时间同步 主时钟定期发送带预估发送时间 t1 的报文(若支持硬件时间戳,实际 t1​ 由后续的Follow_Up报文携带)。所有设备启动后通过协商选举出唯一主时钟(Grandmaster),其余设备自动成为从时钟(Slave)。:从时钟记录接收时间 t2,随后向主时钟发送Delay_Req并记录发送时间 t3​。若使用支持PTP的交换机,可修正报文在交换机内的驻留时间,进一步提升精度。从时钟根据offset调整本地时钟,实现与主时钟同步。动态调整本地时钟,抵消传输延迟和时钟漂移。(或通过BMCA自动当选)。 阅读详情

相关推荐

Gemini Enterprise免费试用攻略:解锁企业级AI平台的隐藏技巧与避坑指南

本文详细介绍了Gemini Enterprise免费试用的全流程攻略,包括注册优化、团队协作、资源管理和典型应用场景。通过解锁企业级AI平台的核心功能如Gemini 3.0 Pro模型和Nano Banana图像生成系统,帮助企业高效评估AI与业务的契合度。文章还提供了安全合规与数据管理的实用建议,确保试用过程顺畅无忧。

weixin_29233857的博客 657

Hive的四种排序方法

hive有四种排序方法: ORDER BY 、SORT BY 、DISTRIBUTE BY 、CLUSTER BY。hive排序方法,hive的排序方式。

Taerge0110的博客 2428

告别Python依赖!用C++编译PaddleOCR打造轻量级本地OCR工具(附模型选择与性能对比)

本文详细介绍了如何将PaddleOCR从Python迁移到C++平台,打造高性能、低资源占用的本地OCR工具。通过对比Python和C++实现的性能差异,展示了C++在冷启动时间、内存占用和部署便捷性上的显著优势。文章还提供了模型选择、编译配置和优化技巧等实用指南,帮助开发者轻松构建轻量级OCR解决方案。

weixin_28717467的博客 256

HIVE 排序总结

Hive排序过程主要用到order by 、sort by、distribute by 和cluster by。 本文详细的总结了以上语句的用法。

yanzhelee 5329

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

华为HPLC模组全拆解之电力载波收发原理分析

电力线载波通信(PLC)是一种使用电力线进行数据传输的通信技术,即利用现有电网作为信号的传输介质,使电网在传输电力的同时可以进行数据传输。目前根据所用频段的不同,低压电力线载波通信一般分为窄带电力线载波通信(10KHz~500KHz)和宽带电力线载波通信(2MHz~20MHz)。这里的频率可以简单理解为单片机串口的通信波特率,频率越小通信速度越慢,频率越大通信速度越快。为了研究电力载波通信原理,笔者以华为的一款宽带电力载波模组为例进行详细的分析,该模组主控采用的是海思芯片,型号为Hi3921EV100。

xingxingdiandeng69的博客 2万+

浅析Hive的四种排序方式

一、order by  order by 是要对输出的结果进行全局排序,这就意味着只有一个reducer才能实现(多个reducer无法保证全局有序), 但是当数据量过大的时候,效率就很低。如果在严格模式下(hive.mapred.mode=strict),则必须配合limit使用。 二、sort by sort by 不是全局排序,只是在进入到reducer之前完成排序,只保证了每个re

DM_Source的博客 1958

SuperMap iDesktop 9D三维倾斜摄影数据处理

OSGB格式的三维倾斜摄影数据进入时空大数据平台之前需要进行数据优化和格式转换

weixin_43204897的博客 1131

hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法

order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。 set hive.mapred.mode=nonstrict; (default value / 默认值) set hive.mapred.mode=strict;  order by 和数据库中的Or...

weixin_34381666的博客 506

STC8单片机低功耗延时优化实践:从循环等待到定时唤醒

本文深入探讨了STC8单片机低功耗延时优化的核心方法,即利用掉电唤醒定时器(WKT)替代传统的循环等待,实现从“空转耗电”到“定时唤醒”的转变。通过实战代码演示了如何编写低功耗延时函数,将待机电流从mA级降至μA级,并分析了精度、唤醒时间等关键权衡点,为电池供电的物联网设备提供了有效的续航优化方案。

pea55的博客 324

【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization)

量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。

学习,输出==》再学习再输出 1213

归并排序 图解算法过程

本文转自:http://blog.youkuaiyun.com/collonn/article/details/17581953图真好!归并排序,图解,详细过程。 package com.collonn.algorithm.sort;/** * <pre> * 经典归并排序 * </pre> */ public class MergeSort { public void mergeSort(in

Xianming的专栏 3044

57、各向异性材料力学问题的分析与求解

本文系统分析了各向异性材料在扭转和平面变形问题中的力学行为,介绍了基于应力和位移的求解方法,包括应力函数推导、位移场假设、艾里应力函数法等。通过具体示例,如椭圆截面杆的扭转和各向异性板的均匀拉伸,展示了求解过程,并讨论了各向异性材料在工程应用中的意义及未来研究方向。

7h6j5k4l3的博客 204

【基本算法】归并排序

数组从左开始判断到第几个数了(先思考一个问题:在进行 {甩在后头,即关于此时关于。的数组有序地合并起来。

多多俊杰的博客 2179

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

归并排序基本思想

前言 今天跟着AcWing研究了一下归并排序算法,对归并排序算法有了一定的体会,所以写了以下文章。 一、归并排序算法的基本思想:分治思想 分治思想:分:划分成很多个小的问题,然后递归处理,治:将分阶段得到的答案整合起来,即为分治思想。 快速排序算法的基本流程如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210706194929219.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shad

estxiyang的博客 7160

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)

#define ARRAY_SIZE 1024int B[1024];  //使用一个全局变量,避免归并排序中每次都重新申请和释放空间造成的开销template void Merge(T A[], int l, int m, int h){    int i = l;    int j = m+1;    int k = 0;    while(i    {        if(A[i

greenlifer的专栏 1030

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基本算法-归并排序

本文介绍一种排序算法——归并排序法。

翟天保的博客 1万+

归并排序的基本实现

1.归并排序的基本特性 1)稳定性:稳定 2)平均时间复杂度:O(nlogn) 3)最小时间复杂度:O(nlogn) 4)最大时间复杂度:O(nlogn) 6)空间复杂度:O(n) 2.算法描述 ...

qq_33661641的博客 150

基本排序之详解归并排序

归并排序 一、归并排序的效率是仅次于快速排序的稳定的排序算法,其时间复杂度为O(nlog2n)。我们对n 个元素进行一次归并排序时,归并的次数约为log2n,每一次的两路归并排序元素的比较次数约为n-1。 二、归并排序的基本思想:         归并排序是通过将一列数组序列中的元素看成一个一个的小序列来进行归并,直到所有的元素都被归并完成后,排序即完成,便是成功的完成了排序

Rob-Code 1447

归并排序基本知识介绍

前言 归并排序稍微有那么些些的麻烦,归并排序中会涉及到递归算法。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 1、首先考虑下如何将两个有序数列合并。这个非常简单,只要比较的两个数列的第一个数,谁小就先取谁,取了后移动索引。然后再进行比较,如果有任何一个数列为空,那直接将另一个数列的数据依次取出即可。 publi...

OnHold的博客 381

归并排序的基本思想、代码实现以及性能分析总结

归并排序 1,基本思想 将两个或两个以上的有序表合并成一个新的有序表。(本文所指内容为两路归并排序) 两路归并:将原始序列中的两个有序表,归并成一个有序表,存在于另一个对象序列中。 迭代的归并排序算法:将初始序列中的n个对象,看成n个长度为1的有序子序列,先做两两归并,得到int(n/2)个长度为2的归并项(如果n为奇数,则最后一个有序子序列为1);在做两两归并,重复直到最后得到一个长度为n的有序序列。 2,代码实现 归并两个序列 //将两个数组进行归并 void merge(int data[], in

qq_45043381的博客 949

排序算法1:归并排序的基本思想和应用示例

排序算法1:归并排序归并排序1:归并排序基本思想2:归并排序的应用:小和问题和逆序对问题2.1 小和问题和逆序对问题2.2 C++的代码示例2.3 python代码示例 归并排序 1:归并排序基本思想 1:归并排序的过程:递归+合并   递归:每一次将数组分为左右2个子数组,然后再将左右2个子数组划分为2个子数组。base是当划分的子数组只有1个数字时,就直接返回。返回了两个base的结果之后,然...

xueping_wu的博客 2842

基本排序(4)——归并排序、计数排序

归并排序适用于对大量数据进行排序(指超过内存存储上限的数据量,其他排序算法完全无法处理),计数排序则是另一种思路。 #归并排序、计数排序

Ctrl_C_V_is_easy的博客 578

归并排序(适用于数据基本有序)

原题https://www.luogu.org/problemnew/show/P1309 题解:这个题目全程调用sort()会超时,考虑到数据都是基本有序的这一特点,应选择归并排序。快速排序适用于数据顺序比较随机的情况。 #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; struct NODE { int score; int sl; i...

qq_38993096的博客 1077

基本排序算法系列(二)——归并排序

今天主要说一下归并排序,主要介绍可以看菜鸟教程的归并排序 归并排序的主要思路如下 1、将一个待排序列一分为2,得到左右两个待排子序列,如果序列长度小于2,就不再切分; 2、对得到的左右两个子序列重复步骤1; 3、对序列进行排序 图解如下(来源网络) 举个栗子 比如要排下面这个序 5,6,9,8,7 首先划分成如下样子 5,6 9,8,7 序列长度大于2,继续划分 5 || 6 9|| 8,7 我们发现,左子序列的子序列的长度都

qq_43569111的博客 413

【一文吃透归并排序】基本归并·原地归并·自然归并 C++

不从整体开始切分,而是一开始把每一个元素当成一个列表,然后,自底向上地合并相邻的列表,重复利用开始的那张图。

六根胡子 1872
上一篇: 基本排序之堆排序
下一篇: 二叉排序树的实现和操作
Scofield-
博客等级 码龄14年 12粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值