2013-08-19 107 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。 dinos使用Turbo C和Turbo C++。现在它们已经灭绝了,编译器也是如此。 –

+1

ideone给出了段错误。 – chris

回答

0

修复qs()

有无限递归给段错误

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

相关问题