#include <stdio.h>
int p[1000000] = {0};//坐标数组
void Sort( int a[], int* L, int* R);
int main()
{
int n,d;//只数。可听见距离
int i,j;
int count = 0;
scanf("%d %d",&n,&d);
for ( i=0; i<n; i++) {
scanf("%d",&p[i]);
}
Sort(p,&p[0],&p[n-1]);
for ( i=0; i+1<n; i++) {//每一只牛只需要判断和他右侧的牛是否可以沟通
for ( j=i+1; j<n; j++) {
if (p[j]-p[i] <= d) {
count++;
} else {
break;
}
}
}
printf("%d",count);
return 0;
}
void Sort( int a[], int* L, int* R)//待排序数组,头值,尾值
{
int* left = L;//指向头值
int* right = R;//指向尾值
int pivot = *left;//确定中值
if (*L == *R) {//若头值尾值相等,说明此段只有一个数字,不用排序
return;
}
while (left < right) {
while (*right >= pivot && left < right) {//从尾值开始,遇到比中值大的就略过,同时防止 right跑到 left左边
right--;
}
if (*right < pivot) {//遇到比中值大的就移到 left所指处,接下来开始对 left操作
*left = *right;
left++;
while (*left <= pivot && left < right) {//头值开始,小于中值略过
left++;
}
if (*left > pivot && left < right) {//大于中值放到 right所指处
*right = *left;
right--;
}
}
}
*left = pivot;//将中值放入指针重叠处
if (left > L) {
Sort(a,L,right-1);
}
if (right < R) {
Sort(a,left+1,R);
}
}
用上述代码做此题的时候有三个WA,第七第八第十一。 但是用c库函数qsort替换掉自己写的排序后直接全AC,搞不懂,求大佬解惑。