【问题标题】:Unable to write the mergesort code [closed]无法编写归并排序代码 [关闭]
【发布时间】:2012-10-31 05:27:54
【问题描述】:

我正在尝试为合并排序编写以下代码,谁能告诉我代码有什么问题:-

#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;
}

【问题讨论】:

标签: c algorithm mergesort


【解决方案1】:

void divider(int low,int high) 中,应该是if(low&lt;high),而不是您所写的if(low&lt;mid)

要了解原因,请尝试理解以下情况,例如 low=2、high=3,这里 mid=(low+high)/2=5/2=2。因此你的条件失败了。

【讨论】:

    【解决方案2】:

    只需用if(low&lt;high)而不是if(low&lt;mid)更改除法器函数中的条件检查

    【讨论】:

      【解决方案3】:

      1, arr[i] = rand()%21;是否有可能获得真正的系列随机数?请使用 srand (time(0)) 然后使用 rand ()。在其他一些语言中,rand(时间)也是可以接受的。 2、在分频器中,如果(低

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 2010-11-29
        • 2011-10-07
        • 1970-01-01
        相关资源
        最近更新 更多