在turbo c ++ 3.0中没有编译错误但没有输出

时间:2013-08-19 05:44:03

标签: c turbo-c++

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

2 个答案:

答案 0 :(得分:1)

在你的函数qs中,检查条件应该是这样的

  if(p>=q)
  {

    return(arr);
  }

否则会对函数qs

进行无限递归调用

答案 1 :(得分: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);
 }
}