| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1738 人关注过本帖
标题:合并排序,我的思路很清晰
取消只看楼主 加入收藏
潺潺的小河
Rank: 2
等 级:论坛游民
帖 子:29
专家分:10
注 册:2019-3-2
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:2 
合并排序,我的思路很清晰
程序代码:
#include"stdio.h"
#include"stdlib.h"
#define N 8
void Merge(int A[],int first,int mind,int end);
void Merge_sorted(int A[],int first,int end);

void main()
{
    int A[N]={5,2,4,7,1,3,2,6};
    int i;
    Merge_sorted(A,0,N-1);
    for(i=0;i<N;i++)
    {
       printf("\t%d",A[i]);
    }
}
void Merge_sorted(int A[],int first,int end)
{
    int mind;
    if(first<end)
    {
         mind=(end-first)/2;
         Merge_sorted(A,first,mind);
         Merge_sorted(A,mind+1,end);
         Merge(A,first,mind,end);
    }
}
void Merge(int A[],int first,int mind,int end)
{
     int i,k=0,n=0;
     int *L,*R;
     L=(int*)malloc(sizeof(int)*(mind-first+1));
     R=(int*)malloc(sizeof(int)*(end-mind+1));
     //数组中的元素转移;
     for(i=first;i<mind;i++,k++)
     {
         *(L+k)=A[i];
     }
     k=0;
     for(i=mind+1;i<end;i++,k++)
     {
         *(R+k)=A[i];
     }
     //合并两数组
     k=0;
     for(i=first;i<end;i++)
     {
         if(*(L+k)<=*(R+n))
         {
             A[i]=*(L+k);
             k++;
         }
         else
         {
             A[i]=*(L+n);
             n++;
         }
     }
     //释放空间
     free(L);free(R);
}


但问题不知道 :哪里出错了
搜索更多相关主题的帖子: 合并 void int first end 
2019-03-18 19:25
潺潺的小河
Rank: 2
等 级:论坛游民
帖 子:29
专家分:10
注 册:2019-3-2
收藏
得分:0 
回复 2楼 word123
感谢提醒!
2019-03-19 13:22
潺潺的小河
Rank: 2
等 级:论坛游民
帖 子:29
专家分:10
注 册:2019-3-2
收藏
得分:0 
回复 2楼 word123
     R=(int*)malloc(sizeof(int)*(end-mind));//更新部分end-mind+1

这一部分 我理解不到 为什么不(end-mind+1) 在N=2的情况下,我就觉感有问题。
2019-03-19 13:55
快速回复:合并排序,我的思路很清晰
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016333 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved