2013-08-19 1 views
-1
#include <stdio.h> 
#include <conio.h> 

int *qs(int*,int,int); 
int partition(int*,int,int); 

void main() 
{ 
    int arr[]={60,65,70,75,80,55,50,45,40}; 
    int p=0,q=8; 
    int *sa; 
    clrscr(); 
    sa=qs(arr,p,q); 
    printf("\n After applying quick sort the array will be::\n"); 
    while(p<=q) 
    { 
     printf(" %d",*sa); 
     sa++; 
     p++; 
    } 
    getch(); 
} 

int *qs(int *arr,int p,int q) 
{ 
    int pos; 
    if(p==q) 
    { 
     return(arr); 
    } 
    else 
    { 
     pos=partition(arr,p,q); 
     qs(arr,p,pos-1); 
     qs(arr,pos+1,q); 
     return(arr); 
    } 
} 

int partition(int *arr,int p,int q) 
{ 
    int x,i,j,temp; 
    x=arr[p]; 
    i=p; 
    for(j=p+1;j<=q;j++) 
    { 
     if(arr[j]<=x) 
     { 
      i=i+1; 
      temp=arr[i]; 
      arr[i]=arr[j]; 
      arr[j]=temp; 
     } 
    } 
    temp=arr[i]; 
    arr[i]=arr[p]; 
    arr[p]=temp; 
    return i; 
} 

Le programme est pour le tri rapide en utilisant l'algorithme de division et de conquête. Alors que je compile ce code en utilisant turbo C++ 3.0, je ne reçois aucun message d'erreur mais en cours d'exécution je ne reçois que l'écran noir de la console .. J'ai essayé de nombreuses fois, mais pas en mesure de trouver une erreur.pas d'erreur de compilation mais pas de sortie en turbo C++ 3.0

+1

Et que se passe-t-il dans le débogueur? Presque certainement une boucle infinie là-bas quelque part ... – trojanfoe

+3

Veuillez utiliser GCC. Turbo C et Turbo C++ ont été utilisés par les dinosaures. Maintenant, ils sont éteints et ce compilateur aussi. –

+1

ideone donne un segfault. – chris

Répondre

0

Fix qs():

Il y a une récursion infinie donnant un segfault

int *qs(int arr[],int p,int q) 
{ 
int pos; 
if(p<q){ 
    pos=partition(arr,p,q); 
    qs(arr,p,pos-1); 
    qs(arr,pos+1,q); 
    return(arr); 
} 
} 
1

Dans votre condition de contrôle fonction qs devrait être comme ça

if(p>=q) 
    { 

    return(arr); 
    } 

bien il y aura infini appel récursif pour fonctionner qs

Questions connexes