程序没有大概,目标是完全理解某一种算法,比如这道题的快排算法,继续努力吧
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int n,d;
double pl[1005],pr[1005];
void kp(int L,int R)
{
double m1=pl[L+R>>1],m2=pr[L+R>>1];
int i=L,j=R;
double key;
while(i<j)
{
while(pr[i]<m2) i++;
while(pr[j]>m2) j--;
if(i<=j)
{
key=pr[i];
pr[i]=pr[j];
pr[j]=key;
key=pl[i];
pl[i]=pl[j];
pl[j]=key;
++i;j--;
}
}
if(i<R) kp(i,R);
if(j>L) kp(L,j);
}
int main()
{
int x,y;
double temp;
int i;
int flag;
int count;
int count_n=0;
double place;
while(scanf("%d%d",&n,&d)==2)
{
if(n==0&&d==0)
break;
count=0;
flag=0;
count_n++;
memset(pl,0,sizeof(pl));
memset(pr,0,sizeof(pr));
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
if(y>d)
{
flag=1;
}
temp=d*d-y*y;
temp=sqrt(temp);
pl[i]=x-temp;
pr[i]=x+temp;
}
if(flag)
{
printf("Case %d: -1\n",count_n);
}
else
{
while(n)
{
kp(1,n);
place=pr[1];
for(i=1;i<=n;)
{
if(pl[i]<=place&&pr[i]>=place)
{
pl[i]=pl[n];
pr[i]=pr[n];
n--;
}
else
i++;
}
count++;
}
printf("Case %d: %d\n",count_n,count);
}
}
return 0;
}
本文介绍了一个基于快速排序算法的应用实例,通过实现一个特定问题解决流程,详细展示了如何使用C语言来编写快速排序,并针对具体场景进行算法应用。该程序能够处理特定的输入数据并对其进行排序。
365

被折叠的 条评论
为什么被折叠?



