找到n个数组中两个最接近数字之间的距离。 (预分类阵列)

时间:2016-03-23 17:19:36

标签: loops array-algorithms

与强力θ(n2)相比,数组被预先排序,使得算法θ(nlogn)[排序+找到最小距离]。两个代码执行相同的工作,但第一个代码显示超出时间限制。我想知道错误是什么。代码中的任何错误?

带有while循环的代码(超出时间限制)

#include <stdio.h>

void mindistance(int a[],int n)
{
    int i=1,arraymin=999,currentmin,current=a[0];

    while(i<n)
    {
        if(a[i]==current)
            i++;
        else
        {
            currentmin=a[i]-a[i-1];
            if(currentmin<arraymin)
            {
                arraymin=currentmin;
                current=a[i];
                i++;
            }

        }
    }
    printf("%d",arraymin);
}


int main(void)
{

    int a[]={4,34,56,77,99,424,754}; 
    mindistance(a,7);

    return 0;
}

使用for循环的代码(效果很好)

#include <stdio.h>

void mindistance(int a[],int n)
{
    int i,arraymin=999,currentmin,current=a[0],x,y;

    for(i=1;i<n;i++)
    {
        if(a[i]==current)
            continue;
        else
        {
            currentmin=a[i]-a[i-1];
            if(currentmin<arraymin)
            {
                arraymin=currentmin;
                current=a[i];

            }

        }
    }
    printf("%d",arraymin);
}


int main(void)
{

    int a[]={4,34,56,77,99,424,754};
    mindistance(a,7);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

循环不完全相同。在for循环中,i在每次迭代中增加,而在while循环中,i仅在某些情况下增加。一个相同的while循环是:

while(i<n)
{
    if(a[i]==current)
        i++;
    else
    {
        currentmin=a[i]-a[i-1];
        if(currentmin<arraymin)
        {
            arraymin=currentmin;
            current=a[i];
        }
        i++;
    }
}

答案 1 :(得分:0)

我相信你会陷入无限循环,因为你不是每次迭代都设置电流值。