算法分析与实践4

1.问题
[描述算法问题,首选形式化方式(数学语言),其次才是非形式化方式(日常语言)]
对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k

2.解析
[问题的理解和推导,可用电子版直接在此编写,也可用纸笔推导,拍照嵌入本文档]
在这里插入图片描述

3.设计
[核心伪代码]
void Mergesort(int arr[], int g, int d)//其中r表示原数组,Left是数组的起始下标,Right是数组的结束位置下标
如果数组不止一个元素时
将原始数组分为两部分,分治
对第一部分数组进行递归排序
对第二部分数组进行递归排序
对分治的数组进行递归合并

void Merge(int arr[],int g,int k,int d)
{
int i=g,j=k+1;
int m=0,n=0;
创建临时数组用于存放排列好的原数组 ,这个临时数组的大小是由每次函数输入的大小决定的
然后排序

while(i <= k) // 将第一部分多余的数值放置于临时数组后面 
t[m++] = arr[i++];
while(j <= d) // 将第二部分多余的数值放置于临时数组后面,注这些多余的数值一定比之前排序的数值大 
t[m++] = arr[j++];
// 下面要讲排序后的数组返回给原数组 
m = 0; // 将m的值返回为0 
for(n=g; n<=d; n++) // 返回排序的部分 
arr[n] = t[m++];

}
4.分析
[算法复杂度推导]
5.源码
[github源码地址]
https://github.com/xujinyuanky/-/tree/master

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值