请问一下我写的快速排序算法错在哪里
查看原帖
请问一下我写的快速排序算法错在哪里
560460
艾拉_Isla_楼主2021/9/21 09:47
#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,搞不懂,求大佬解惑。

2021/9/21 09:47
加载中...