c语言mergesort 参数,求教关于归并排序MergeSort()的问题
已结贴√
问题点数:20 回复次数:1
求教关于归并排序MergeSort()的问题
#include
#include
void InputArray(float *p,int n);
void C_MergeSort(float *p1,int low,int middle,int high,float *p2);
void MergeSort(float *p1,int low,int high,float *p2);
int main(void)
{
float *p1=NULL,*p2=NULL;
int i,n;
printf("Enter n:");
scanf("%d",&n);
p1=(float*)malloc(n*sizeof(float));
p2=(float*)calloc(n,sizeof(float));
if(p1==NULL)
{
printf("No enough memory!\n");
exit(1);
}
if(p2==NULL)
{
printf("No enough memory!\n");
exit(1);
}
InputArray(p1,n);
MergeSort(p1,0,n-1,p2);
for(i=0;i
printf("%f ",p2[i]);
printf("\n");
for(i=0;i
printf("%f ",p2[i]);
printf("\n");
free(p1);
free(p2);
system("pause");
return(0);
}
void InputArray(float *p,int n)
{
int i;
printf("Enter an array whose length is %d:\n",n);
for(i=0;i
{
scanf("%f",&p[i]);
}
}
void C_MergeSort(float *p1,int low,int middle,int high,float *p2)
{
int i=low,j=middle+1,k=low;
while(i<=middle && j<=high)
{
if(p1[i]>p1[j])
{
p2[k++]=p1[j++];
while(j==high+1 && i<=middle)
{
p2[k++]=p1[i++];
}
}
else
{
p2[k++]=p1[i++];
while(i==middle+1 && j<=high)
{
p2[k++]=p1[j++];
}
}
}
for(i=0;i<=high;i++) //关键
p1[i]=p2[i];
}
void MergeSort(float *p1,int low,int high,float *p2)
{
int middle=(low+high)/2;
printf("low=%d,middle=%d,high=%d\n",low,middle,high); //打印,看看规律
if(low
{
MergeSort(p1,low,middle,p2); //注意MergeSort和C_MergeSort的顺序
MergeSort(p1,middle+1,high,p2);
C_MergeSort(p1,low,middle,high,p2);
}
}
最后一个部分,即MergeSort是参考书上的
我有一个疑问,用例子说明
{5, 3, 6, 1}。
MergeSort分裂为{5, 3}和{6, 1}
MergeSort分裂{5, 3}为{5}, {3};分裂{6, 1}为{6}, {1}
现在递归已经到头,因为继续分的话low>high
所以运行C_MergeSort,合并{5}, {3}为{3, 5};合并{6}, {1}为{1, 6}
退到上一层递归,合并{3, 5}和{1, 6}为{1, 3, 5, 6}。
问题是,在MergeSort中,当运行了C_MergeSort,C_MergeSort的后面什么都没有了,不是直接下去了吗?还有反复调用函数啊?
还有,在MergeSort中,当运行了MergeSort(p1,low,middle,p2),要等到它执行完,才轮到MergeSort(p1,middle+1,high,p2)的吧?
程序是可以用的,大家帮忙解释下,我非计算机专业,但是对这个感兴趣。
c语言mergesort 参数,求教关于归并排序MergeSort()的问题相关推荐
- 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 两个有序序列的中位数 (20分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A ...
- c语言mergesort 参数,归并排序C语言兑现MergeSort
归并排序C语言实现MergeSort 是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 算法伪码: MERGE-SORT(A,p ...
- C语言两种方法实现归并排序
递归实现归并排序思想 使用递归的方法来分元素 使用临时数组来保存排好序的元素 把临时数组中的元素拷贝给原数组 void mergeAdd(int arr[], int left, int mid, i ...
- Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4 函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部 ...
- c语言int val,c语言不定参数与printf函数的实现
今天学习了C语言不定参数,C语言中的不定参数主要靠这个头文件实现,这个头文件包含了va_list().va_start().va_end()三个宏,其用法为先声明一个va_list类型的变量,它用于访 ...
- c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理
在本人的<C语言可变参数函数的实现方法>一文中,介绍了如何建立自己的可变参数函数. 下面继续介绍可变参数函数的实现原理. 在汇编语言程序设计中,详细介绍了子程序的实现思想: (1)子程序只 ...
- c语言函数调用参数调用的太少,浅谈C语言函数调用参数压栈的相关问题
参数入栈的顺序 以前在面试中被人问到这样的问题,函数调用的时候,参数入栈的顺序是从左向右,还是从右向左.参数的入栈顺序主要看调用方式,一般来说,__cdecl 和__stdcall 都是参数从右到左入 ...
- C语言 | 函数参数
C语言函数参数 C语言函数的参数可以是变量.变量指针和变量引用. //如下#include<stdio.h> int maxNumber(int x,int y); //此处括号里的x y ...
- c语言函数参数从右往左,C语言函数入参压栈顺序为什么是从右向左?
看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...
- C语言可变参数函数_初探
一.什么是可变参数函数 C语言允许定义参数数量可变的函数,这称为可变参数函数(variadic function).这种函数需要固定数量的强制参数,后面是数量可变的可选参数. 其中,强制参数必须至少一 ...
最新文章
- iphone圆点怎么弄出来_新款iPhone放出终极大招,果粉:就没高级点的嘛
- Java开发面试问题,牛逼轰轰!
- Android 插件化总结
- 给select设置默认值,在option在页面上已经写死的情况下
- [TT]-Trustonic acronyms
- Docker 实战总结(非常全面)
- 参数匹配模型——Python学习之参数(二)
- 很久没更新博客了,再发协同开发中SVN使用规范
- metadata usage in the runtime
- 计算机应用大一题,大一计算机应用基础习题与答案(精选).doc
- iOS开发——高级技术通讯录功能的实现
- 两组数据的偏差怎么算_数据随机性,如何利用游程检验来检测?
- Excel用控件动态控制图表
- jQuery 文档操作方法大全(也适用于 XML 文档和 HTML 文档)
- python-第三方接口获取验证码
- 计算机保研面试中,都有哪些令人窒息的问题?
- 2238. Number of Times a Driver Was a Passenger
- 百度富文本编辑器Ueditor图片上传的注意点
- python计算器程序设计课程报告_20193120 2019-2020-2 《Python程序设计》实验二报告
- ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
热门文章
- .Net·使用ILSpy反编译exe或dll文件保存为项目结构
- Java 正则表达式,正则表达式匹配a标签下的链接,正则表达式基础
- 怎样在VMWare虚拟机中的Windows系统使用U盘启动盘进入PE环境
- Win10 系统通过易升升级后,系统盘空间不足解决办法(个人经历)
- Qt编写地图综合应用14-离线地图下载
- Linux vi 进去命令模式,Linux 下 vi/vim 文本编辑器详细命令使用方法,linux的vi/vim命令vi/vim命令模式,输入模式和末行模式...
- SIFT算法原理介绍
- php两个手机号正则表达式_php中手机号码正则表达式代码
- python流量分析_python 监控流量
- matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法