0

我正在尝试为合并排序编写以下代码,任何人都可以告诉我代码有什么问题:-

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

3 回答 3

2

void divider(int low,int high)中,它应该if(low<high)不是if(low<mid)您所写的。

要知道为什么,试着理解像 low=2, high=3 这样的情况,这里 mid=(low+high)/2=5/2=2。因此,您的条件失败。

于 2012-10-31T05:55:23.483 回答
1

只需使用if(low<high)而不是更改除法器功能中的条件检查if(low<mid)

于 2012-10-31T06:05:16.963 回答
-1

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

于 2012-10-31T06:29:02.420 回答