已结贴√

问题点数: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()的问题相关推荐

  1. 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 两个有序序列的中位数 (20分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,⋯,AN−1的中位数指A ...

  2. c语言mergesort 参数,归并排序C语言兑现MergeSort

    归并排序C语言实现MergeSort 是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 算法伪码: MERGE-SORT(A,p ...

  3. C语言两种方法实现归并排序

    递归实现归并排序思想 使用递归的方法来分元素 使用临时数组来保存排好序的元素 把临时数组中的元素拷贝给原数组 void mergeAdd(int arr[], int left, int mid, i ...

  4. Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

    Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部 ...

  5. c语言int val,c语言不定参数与printf函数的实现

    今天学习了C语言不定参数,C语言中的不定参数主要靠这个头文件实现,这个头文件包含了va_list().va_start().va_end()三个宏,其用法为先声明一个va_list类型的变量,它用于访 ...

  6. c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理

    在本人的<C语言可变参数函数的实现方法>一文中,介绍了如何建立自己的可变参数函数. 下面继续介绍可变参数函数的实现原理. 在汇编语言程序设计中,详细介绍了子程序的实现思想: (1)子程序只 ...

  7. c语言函数调用参数调用的太少,浅谈C语言函数调用参数压栈的相关问题

    参数入栈的顺序 以前在面试中被人问到这样的问题,函数调用的时候,参数入栈的顺序是从左向右,还是从右向左.参数的入栈顺序主要看调用方式,一般来说,__cdecl 和__stdcall 都是参数从右到左入 ...

  8. C语言 | 函数参数

    C语言函数参数 C语言函数的参数可以是变量.变量指针和变量引用. //如下#include<stdio.h> int maxNumber(int x,int y); //此处括号里的x y ...

  9. c语言函数参数从右往左,C语言函数入参压栈顺序为什么是从右向左?

    看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...

  10. C语言可变参数函数_初探

    一.什么是可变参数函数 C语言允许定义参数数量可变的函数,这称为可变参数函数(variadic function).这种函数需要固定数量的强制参数,后面是数量可变的可选参数. 其中,强制参数必须至少一 ...

最新文章

  1. iphone圆点怎么弄出来_新款iPhone放出终极大招,果粉:就没高级点的嘛
  2. Java开发面试问题,牛逼轰轰!
  3. Android 插件化总结
  4. 给select设置默认值,在option在页面上已经写死的情况下
  5. [TT]-Trustonic acronyms
  6. Docker 实战总结(非常全面)
  7. 参数匹配模型——Python学习之参数(二)
  8. 很久没更新博客了,再发协同开发中SVN使用规范
  9. metadata usage in the runtime
  10. 计算机应用大一题,大一计算机应用基础习题与答案(精选).doc
  11. iOS开发——高级技术通讯录功能的实现
  12. 两组数据的偏差怎么算_数据随机性,如何利用游程检验来检测?
  13. Excel用控件动态控制图表
  14. jQuery 文档操作方法大全(也适用于 XML 文档和 HTML 文档)
  15. python-第三方接口获取验证码
  16. 计算机保研面试中,都有哪些令人窒息的问题?
  17. 2238. Number of Times a Driver Was a Passenger
  18. 百度富文本编辑器Ueditor图片上传的注意点
  19. python计算器程序设计课程报告_20193120 2019-2020-2 《Python程序设计》实验二报告
  20. ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释

热门文章

  1. .Net·使用ILSpy反编译exe或dll文件保存为项目结构
  2. Java 正则表达式,正则表达式匹配a标签下的链接,正则表达式基础
  3. 怎样在VMWare虚拟机中的Windows系统使用U盘启动盘进入PE环境
  4. Win10 系统通过易升升级后,系统盘空间不足解决办法(个人经历)
  5. Qt编写地图综合应用14-离线地图下载
  6. Linux vi 进去命令模式,Linux 下 vi/vim 文本编辑器详细命令使用方法,linux的vi/vim命令vi/vim命令模式,输入模式和末行模式...
  7. SIFT算法原理介绍
  8. php两个手机号正则表达式_php中手机号码正则表达式代码
  9. python流量分析_python 监控流量
  10. matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法