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