标题:C语言求指教
只看楼主
kkq292
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-5-24
结帖率:0
 问题点数:0 回复次数:1 
C语言求指教
问题请见下面的注释行,数据结构里面的归并算法排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1000000
int b[N];
void init(int a[],int n)//初始化
{
    int i;
    for(i=0;i<n;i++)
        a[i] = random();
}

void print(int a[],int n)//输出
{
    int i;
    for(i=0;i<n;i++)
    printf("%d \n",a[i]);
}

void merge(int a[],int start,int end,int mid)
{
    int i=start;
    int j=mid+1;
    int k=0;
    while(i<=mid&&j<=end)
    {
        if(a[i]<a[j])
                b[k++]=a[i++];
        else
                b[k++]=a[j++];
    }
    while(i<=mid)
        b[k++]=a[i++];
    while(j<=mid)
        b[k++]=a[j++];
    for(i=0;i<k;i++)/
        a[start++]=b[i];
}
void merge_sort(int a[],int start,int end)
{   
    if(start>=end)
        return;
    else
    {
    int pivot=(end+start)/2;
    merge_sort(a,start,pivot);//递归在此是怎样执行的啊?是在这个递归结束后再执行下面的语句吗?这样理解的话程序整个就不对了,搞不明白,还请详解!
    merge_sort(a,pivot+1,end);
    merge(a,start,end,pivot);
    }
}
int main()
{
    int a[N];
    init(a,N);
    merge_sort(a,0,N);
    print(a,N);

    return 0;
}
搜索更多相关主题的帖子: void start C语言 include 
2012-06-02 20:55
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
得分:0 
递归用的是栈思想....
2012-06-03 01:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-370682-1-1.html




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

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