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

Программа предназначена для быстрого сортировки с использованием алгоритма разделения и покорения. Хотя я компилирую этот код с помощью turbo C++ 3.0, я не получаю сообщение об ошибке, но при запуске я получаю только черный экран консоли. Я много раз пробовал, но не смог найти никакой ошибки.нет ошибки компиляции, но нет выхода в turbo C++ 3.0

+1

А что происходит в отладчике? Почти наверняка бесконечный цикл где-то там ... – trojanfoe

+3

Пожалуйста, используйте GCC. Turbo C и Turbo C++ использовали динозавры. Теперь они вымерли, и этот компилятор тоже. –

+1

ideone дает segfault. – chris

ответ

0

Fix 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 проверки состояния должно быть, как это

if(p>=q) 
    { 

    return(arr); 
    } 

еще будет бесконечной рекурсивный вызов функции qs