#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
class Mergesort{
private:
int *Arr;
int n;
public:
Mergesort(int n){
this->n=n;
srand((unsigned)time(NULL));
Arr=(int*)malloc(n*sizeof(int));
for(inti=0;i < n;i++){
Arr[i]=rand()%100;
}
}
void Msort(int left,int right);
void Merge(int left,int right,int rigntEnd);
void PrinArr();
~Mergesort(){
free(Arr);
}
};
int main(void)
{
intn;
cin>>n;
classMergesort *p=new Mergesort(n);
p->PrinArr();
p->Msort(0,n-1);
p->PrinArr();
return0;
}
void Mergesort::PrinArr()
{
for(inti=0;i<n;i++){
cout<<Arr[i]<<" ";
}
cout<<endl;
}
void Mergesort::Msort(int left,int right){
intmiddle;
if(left<right){
middle=(left+right)/2;
Msort(left,middle);
Msort(middle+1,right);
Merge(left,middle+1,right);
}
}
void Mergesort::Merge(int left,int right,intrightEnd)
{
int*TmpArry=(int *)malloc((rightEnd-left+1)*sizeof(int));
inttmp;
inti;
intLeft=left;
intRight=right;
for(tmp=0;Left<right&& Right<=rightEnd;) {
if(Arr[Left]<=Arr[Right]){
TmpArry[tmp++]=Arr[Left++];
} else{
TmpArry[tmp++]=Arr[Right++];
}
}
while(Left<right){
TmpArry[tmp++]=Arr[Left++];
}
while(Right<rightEnd){
TmpArry[tmp++]=Arr[Right++];
}
for(i=0,Left=left;i< tmp;i++){
Arr[Left++]=TmpArry[i];
}
free(TmpArry);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异