2013-08-19 3 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; 
} 

이 프로그램은 나누기 및 정복 알고리즘을 사용한 빠른 정렬 용입니다. 터보 C++ 3.0을 사용하여이 코드를 컴파일하는 동안 오류 메시지가 표시되지 않지만 실행 중에는 콘솔의 검은 색 화면 만 표시됩니다. 여러 번 시도했지만 실수를 찾을 수 없습니다.컴파일 오류가없고 터보 C++ 3.0에 출력이 없습니다

+1

그리고 디버거에서 어떻게됩니까? 거의 확실하게 어딘가에 무한 루프가 있습니다. – trojanfoe

+3

GCC를 사용하십시오. Turbo C 및 Turbo C++는 dinos에서 사용되었습니다. 이제 그들은 멸종되었으며이 컴파일러도 마찬가지입니다. –

+1

ideone은 segfault를 제공합니다. – chris

답변

0

수정 qs() :

다른 기능 재귀 호출이 무한합니다이

if(p>=q) 
    { 

    return(arr); 
    } 

같아야 함수 qs 체크 상태에서 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

을주는 무한 재귀있다 qs

관련 문제