为啥这个不对
查看原帖
为啥这个不对
1226563
Qi_jB楼主2023/12/3 11:02
#include<stdio.h>
void merge(int arr[], int left, int m, int right) {
    int i = left, j = m + 1;
    int brr[right - left + 1];
    int k = 0;
    
    while (i <= m && j <= right) {
        brr[k++] = arr[i] >= arr[j] ? arr[j++] : arr[i++];
    }
    while (i <= m) {
        brr[k++] = arr[i++];
    }
    while (j <= right) {
        brr[k++] = arr[j++];
    }
    for (i = 0; i < right - left + 1; i++) {
        arr[left + i] = brr[i];
    }
}
void f(int arr[], int left, int right) {
    if (left == right) {
        return;
    }

    int m = left + ((right - left) >> 1);
 
    f(arr, left, m);
    f(arr, m + 1, right);
    merge(arr, left, m, right);
}
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	int arr[n];
	int brr[m];
	
	int i=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&arr[i]);
		
	}
	for(i=0;i<m;i++)
	{
		scanf("%d",&brr[i]);
	}
	
	f(brr,0,m-1);
	for(i=0;i<n;i++)
	{
		int l=0,r=n-1;
		int count=0;
		while(l<r)
		{
			int mid=l+((r-l)>>1);
			
			if(brr[mid]==arr[i])
			{
				count=1;
				break;
			}
			else
			{
				if(brr[mid]>arr[i])
				{
					r=mid-1;
				}
				else
				{
					l=mid+1;
				}
			}
		}
		if(brr[l]==arr[i])
		{
			count=1;
		}
		if(count==1)
		{
			printf("%d ",arr[i]);
		}
	}
	return 0;
}
2023/12/3 11:02
加载中...