2013-08-19 137 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

相關問題