无法编写mergesort代码

时间:2012-10-31 05:27:55

标签: c algorithm mergesort

我正在尝试为mergesort编写以下代码,有人可以告诉我代码有什么问题: -

#include<stdio.h>
#include<stdlib.h>

int arr[100];

void merge(int low,int mid,int high)
{
    int temp[100],lowind = low,highind = mid+1,i=0;
    while(lowind <= mid && highind<=high)
    {
        if(arr[lowind]<arr[highind])
        {
            temp[i] = arr[lowind];
            i++;
            lowind++;
        }
        else
        {
            temp[i] = arr[highind];
            i++;
            highind++;
        }
    }

    while(lowind<=mid)
    {
        temp[i] = arr[lowind];
        i++;
        lowind++;
    }

    while(highind<=high)
    {
        temp[i] = arr[highind];
        i++;
        highind++;
    }

    for(i=low;i<=high;i++)
        arr[i] = temp[i-low];
}

void divider(int low,int high)
{
    int mid = (low+high)/2;
    if(low<mid)
    {
        divider(low,mid);
        divider(mid+1,high);
        merge(low,mid,high);
    }
}

int main()
{
    int i,j,temp;

    for(i=0;i<20;i++)
        arr[i] = rand()%21;

    for(i=0;i<20;i++)
        printf("%d ",arr[i]);
    printf("\n");

    divider(0,19);

    for(i=0;i<20;i++)
            printf("%d ",arr[i]);
    printf("\n");

    return 0;
}

3 个答案:

答案 0 :(得分:2)

void divider(int low,int high)中,您应该if(low<high)而不是if(low<mid)

要知道原因,尝试理解像low = 2,high = 3,这里mid =(low + high)/ 2 = 5/2 = 2的情况。因此你的病情失败了。

答案 1 :(得分:1)

只需使用if(low<high)代替if(low<mid)更改分隔符函数中的条件检查

答案 2 :(得分:-1)

1,arr [i] = rand()%21;是否有可能得到一个真正的系列随机数?请使用srand(time(0))然后使用rand()。在其他语言中,兰特(时间)也是令人愉快的。 2,在分频器中,如果(低