分治法排序
分治法排序
通过分治模式:“分解,解决,合并 ”实现排序
//2020-12-25 00:08:59 分治法排序
//第二次修改 2021-4-25 21:41:03
#include <iostream>
#include <time.h>
#define M 2000 //待排序数组大小
#define N 2000 //数据最大值
using namespace std;
void merSort(int a[],int l,int r);
void merge_(int a[],int l,int mid,int r);
int main()
{
int i = 0;
int num[M] = {0};
srand(time(NULL));
for(i=0;i<M;i++)
{
num[i] = rand()%N; //随机数赋值
}
printf("\n%d",i);
getchar();
for(i = 0;i<M;i++)
printf("%d ",num[i]);
printf("\n");
getchar();
merSort(num,0,M-1);
for(i = 0;i<M;i++)
cout << num[i] << " " << i <<endl;
return 0;
}
void merSort(int a[],int l,int r)
{
int mid = 0;
mid = (l+r)/2;
if(l<r)
{
merSort(a,l,mid);
merSort(a,mid+1,r);
merge_(a,l,mid,r);
}
}
void merge_(int a[],int l,int mid,int r)
{
int num_1[M] = {0},num_2[M] = {0}; //新数组不知道要怎么确定大小,直接用最大规模M确定了
int i = 0,j = 0,k = 0;
for(i = 0;i<=mid-l;i++)
num_1[i] = a[l+i];
for(j = 0;j<=(r-mid-1);j++)
num_2[j] = a[mid+1+j];
num_1[i] = 32767; //第一次自己写的赋值为100会出现错误,更改为int类型最大值
num_2[j] = 32767; //但此方案在数据为最大值时仍会出现错误,有更好方案会进行替代
for(k = l,i = 0,j = 0;k<=r;k++)
{
if(num_1[i]<=num_2[j])
{
a[k] = num_1[i];
i++;
}
else
{
a[k] = num_2[j];
j++;
}
}
}
//2020-12-25 00:08:59 分治法排序
#include <iostream>
using namespace std;
void merSort(int a[],int l,int r);
void merge_(int a[],int l,int mid,int r);
int main()
{
int i = 0;
int num[10] = {0};
for(i = 0;i<10;i++)
cin >> num[i];
merSort(num,0,9);
for(i = 0;i<10;i++)
cout << num[i] <<endl;
return 0;
}
void merSort(int a[],int l,int r)
{
int mid = 0;
mid = (l+r)/2;
if(l<r)
{
merSort(a,l,mid);
merSort(a,mid+1,r);
merge_(a,l,mid,r);
}
}
void merge_(int a[],int l,int mid,int r)
{
int num_1[10] = {0},num_2[10] = {0};
int i = 0,j = 0,k = 0;
for(i = 0;i<=mid;i++)
num_1[i] = a[l+i];
for(j = 0;j<=(r-mid-1);j++)
num_2[j] = a[mid+1+j];
num_1[i] = 100;
num_2[j] = 100;
for(k = l,i = 0,j = 0;k<=r;k++)
{
if(num_1[i]<=num_2[j])
{
a[k] = num_1[i];
i++;
}
else
{
a[k] = num_2[j];
j++;
}
}
}
本人为初学者,若有不足之处请及时指出,谢谢(๑◡๑)
淡雅随和,宁静致远!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程