2017-08-18 5 views
1

Je suis récemment passé par l'algorithme Divide and Conquer.Diviser et conquérir-Retour d'un tableau

Je suis capable de résoudre les problèmes si la valeur de retour suppose être un nombre entier unique.

Ex: 1. Recherche binaire, ici j'ai juste besoin de retourner 1 si trouvé, sinon -1.

Ex: 2. Nombre maximum dans un tableau, juste besoin de retourner un seul nombre.

Mais quand il s'agit de retourner un tableau, comme lorsque nous avons besoin de tout le tableau en sortie (Ex: Tri).

Je le sens difficile.

Quelqu'un peut-il aider avec la meilleure approche?

Voici mon approche pour la recherche binaire.

#include<stdio.h> 
char* Divide(int arr[],int l,int r,int key) 
{ 
    int m=(l+r)/2; 
    if(l==r) 
    { 
     if(key==arr[m]) 
      return "Found"; 
     else 
      return "Not Found"; 
    } 
    else 
    { 
     if(key==arr[m]) 
      return "Found"; 
     else if(key>arr[m]) 
      Divide(arr,m+1,r,key); 
     else 
      Divide(arr,l,m,key); 
    } 
} 
int main() 
{ 
    int arr[]={1,2,3,4,5,6,7,8}; 
    int n=sizeof(arr)/sizeof(arr[0]); 
    char* result=Divide(arr,0,n-1,10); 
    printf("%s\n",result); 
    return 0; 
} 
+0

Vos appels récursifs de 'Divide' ne retourne rien. Cela conduit à * comportement indéfini *. –

+0

Aussi, s'il vous plaît prenez le temps de [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). Votre question manque d'informations, comme dire ce qui ne va pas avec le code que vous montrez? Je vous recommande également de lire [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) par Eric Lippert, et d'apprendre à utiliser un débogueur. –

+0

Lorsque la fonction se termine, elle revient implicitement, il est donc nécessaire d'appeler l'instruction return. – Zoholover

Répondre

1

vous devez retourner les valeurs dans votre appel récursif essayer

#include<stdio.h> 
char* Divide(int arr[],int l,int r,int key) 
{ 
    int m=(l+r)/2; 
    if(l==r) 
    { 
     if(key==arr[m]) 
      return "Found"; 
     else 
      return "Not Found"; 
    } 
    else 
    { 
     if(key==arr[m]) 
      return "Found"; 
     else if(key>arr[m]) 
      return Divide(arr,m+1,r,key); // just returning values here 
     else 
      return Divide(arr,l,m,key); // and here would make it work 
    } 
} 
int main() 
{ 
    int arr[]={1,2,3,4,5,6,7,8}; 
    int n=sizeof(arr)/sizeof(arr[0]); 
    char* result=Divide(arr,0,n-1,10); 
    printf("%s\n",result); 
    return 0; 
} 

vérifier la démo à online compiler