mergesort程序中的分段错误

时间:2015-03-17 13:58:08

标签: c++ c algorithm sorting mergesort

这是代码

#include<stdio.h>

#include<conio.h>

int a[3];

int b[3];

void merge(int a,int mid,int b);      //merge declaration

void mergesort(int i,int j)
{

    int mid;

    while(i<j)
    {

        mid=(i+j)/2;

        mergesort(i,mid);

        mergesort(mid+1,j);

    }

    merge(i,mid,j);

}


void merge(int c,int mid,int l)               //c-first index,l,last index
{

    int k=0;

    int i=c;

    int j=mid+1;

    while((i<mid) && (j<l))
    {

        if(a[i]>a[j])

            b[k++]=a[j++];

        else

            b[k++]=a[i++];
    }

    while(i<mid)
    {

        b[k++]=a[i++];
    }

    while(j<l)

        b[k++]=a[j++];
}

int main()
{

    int i;

    a[0]=3;

    a[1]=2;

    a[2]=4;

    mergesort(0,2);

    for(i=0;i<3;i++)

        printf("the nums are=%d\n",b[i]);
}

预期输出

the nums are=2
the nums are=3
the nums are=4

1 个答案:

答案 0 :(得分:0)

ab数组长度为3个成员,但在merge中您使用实际值作为索引