c语言mergesort 参数,求教关于归并排序MergeSort()的问题
已結(jié)貼√
問題點數(shù):20?回復次數(shù):1
求教關(guān)于歸并排序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++)??? //關(guān)鍵
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);??//打印,看看規(guī)律
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}
現(xiàn)在遞歸已經(jīng)到頭,因為繼續(xù)分的話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的后面什么都沒有了,不是直接下去了嗎?還有反復調(diào)用函數(shù)啊?
還有,在MergeSort中,當運行了MergeSort(p1,low,middle,p2),要等到它執(zhí)行完,才輪到MergeSort(p1,middle+1,high,p2)的吧?
程序是可以用的,大家?guī)兔忉屜?#xff0c;我非計算機專業(yè),但是對這個感興趣。
總結(jié)
以上是生活随笔為你收集整理的c语言mergesort 参数,求教关于归并排序MergeSort()的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易语言精益模块json_易语言Json解
- 下一篇: 绕过广告拦截插件的解决方案