Die Arrays sind vorsortiert, wodurch der Algorithmus θ (nlogn) [Sortieren + Minimaler Abstand finden] im Vergleich zur Bruteforce θ (n2) erstellt wird. Beide Codes machen die gleiche Arbeit, aber die erste zeigt das Zeitlimit überschritten. Ich frage mich, was der Fehler ist. Irgendein Fehler im Code?Den Abstand zwischen den beiden nächsten Zahlen in einem Array von n Zahlen finden. (Vorsortierte Arrays)
Code mit while-Schleife (Zeitlimit überschritten)
#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;
}
-Code for-Schleife (funktioniert gut)
#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;
}
'i ++' sollte immer passieren. Also, in der while-Schleife entweder als erstes in der Schleife oder als letztes in der Schleife. Tu es nicht in den if-Anweisungen. Was auch immer, es gibt noch ein anderes 'if (currentmin
Das hat funktioniert. Allgemeine i ++ - Anweisung nach der if-else-Klausel. Aber warum funktionierte es nicht früher mit separatem i ++ - Inkrement? –