c语言,两个有序数组求交集,要求效率尽可能高?

如题所述

#include <stdio.h> 
#include <stdlib.h>
#include <memory.h>  
const int M = 5;  
const int N = 6;  

void intersect(int a[], int b[]) {  
    if ((a[M - 1] < b[0]) || (a[0] > b[N - 1]))  return; 
    int n = M < N ? M: N;  
    int *p = (int*)malloc(sizeof(int)*n); 
    memset(p, 0, n); 
    int i = 0; 
    int j = 0; 
    int k = 0; 
    while (i < M && j < N) {  
        if (a[i] < b[j]) i++; 
        else if (a[i] > b[j]) j++; 
        else { 
             p[k] = a[i]; 
             while (a[++i] == p[k]); 
             while (a[++j] == p[k]); 
             k++; 
        } 
    } 
    for (i = 0; i < k; i++)  
        printf("%d ", p[i]); 
    free(p);

int main() {  
     int a[M] = {1, 2, 2, 5, 7};  
     int b[N] = {2, 3, 4, 7, 8, 10};  
     intersect(a, b);
     getchar();
     return 0; 
}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网