2016-12-22 3 views
-8

Was ist der C-Code zum Zusammenführen von zwei unsortierten Arrays ohne Verwendung eines dritten Arrays. ZB array1 = {1,3,5,7} array2 = {2,4,6} Der Ausgang sollte array1 = {1,2,3,4,5,6,7} sein.Zusammenführung von zwei Arrays ohne Verwendung eines 3. Arrays

Dies ist der Code, den ich geschrieben habe. Aber das funktioniert nicht, wenn die Anzahl der Array-Elemente in beiden Arrays identisch sind. Helfen Sie mir bei der Behebung dieses Fehlers.

void merge(int a[],int b[],int ele1,int ele2) 
{ 
int i,j,k,ele3; 
ele3=ele1+ele2; 
for(i=1,k=0;k<ele2;i=i+2) 
{ 
    j=ele1; 
    while(j>=i) 
    { 
     a[j]=a[j-1]; 
     j--; 
    } 
    a[j+1]=b[k]; 
    k++;ele1++; 
} 
for(i=0;i<ele3;i++) 
printf("%d ",a[i]); 
} 

main() 
{ 
int a[]={1,3,5},b[]={2,4},ele1,ele2; 
ele1=sizeof(a)/sizeof(a[0]); ele2=sizeof(b)/sizeof(b[0]); 
merge(a,b,ele1,ele2); 
} 
+3

Hat jemand die ersten 2-Arrays ausreichend Platz haben, zu halten? –

+0

Nichts ist in der Frage erwähnt. Dies war eine Interviewfrage, die ich bekam. Sie sagten alles, was ich wünsche, wenn ich fragte, ob es Speicher gibt. –

+0

Sie sagen unsortierte Arrays, aber das angegebene Beispiel ist für sortierte Arrays. –

Antwort

1

Es ist leicht getan werden kann, wenn einer der Anordnung aller Elemente des Haltens der Lage ist, sonst kann es, wenn eine von der Anordnung durchgeführt werden, die Größe ändern können wir Bei dynamischen Array dynamischen Arrays ist des Arrays von realloc so verwenden, danach haben wir es leicht verschmelzen

die Lösung sein wird [Nicht getestet, die wahrscheinlichste Antwort]

void merge(int ar1[], int ar2[]) 
{ 
    int len = ar1.length; 
    int totalLength= (ar1.length+ar2.length); 
    ar1= (int*)realloc(ar1,(totalLength)*sizeof(int)); 

    for (int i=len,index=0; i<totalLength; i++) 
    { 

    ar1[i]=ar2[index]; 
    index++; 

    } 
} 
+0

@kiran ..... dat funktioniert nicht. –

+0

Was war der Fehler? –

+0

Haben Sie es versucht? –