日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言mergesort 参数,求教关于归并排序MergeSort()的问题

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。