-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 编译此代码时,我没有收到任何错误消息,但在运行时我只收到控制台的黑屏。我尝试了很多次,但找不到任何错误。

4

2 回答 2

1

在你的功能qs检查条件应该是这样的

  if(p>=q)
  {

    return(arr);
  }

否则将无限递归调用函数qs

于 2013-08-19T05:59:33.420 回答
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);
 }
}
于 2013-08-19T05:58:55.123 回答