1. 程式人生 > >C語言實現 求兩個陣列的交集

C語言實現 求兩個陣列的交集

  • 題目描述
    這裡寫圖片描述

  • 分析
    其中一種邏輯比較清晰的方法就是分別對兩個陣列進行排序,再應用二路歸併排序的思想來找出交集。下面是實現的程式碼,其中採用的排序方法是選擇排序。

  • 程式碼實現

void SelectSort(int *nums,int numsSize){
   int min,temp;
   for(int i=0;i<numsSize-1;i++){
        min=i;
        for(int j=i+1;j<numsSize;j++){
            if(nums[min]>nums[j]){
                min=j;
            }
        }
        if
(min!=i){ temp=nums[min]; nums[min]=nums[i]; nums[i]=temp; } } } int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) { int temp,i,j; int *result=(int *)malloc(nums2Size*sizeof(int)); //選擇排序 SelectSort(nums1,nums1Size); SelectSort(nums2,nums2Size); *returnSize=0
; temp=nums1[nums1Size-1]+1; //給temp賦一個不可能與nums1或nums2衝突的值 for(i=0,j=0;i<nums1Size&&j<nums2Size;){ if(nums1[i]>nums2[j]){ j++; } else if(nums1[i]<nums2[j]){ i++; } else{ if(temp!=nums1[i]){ result[(*returnSize)++]=nums1[i]; temp=nums1[i]; } i++; j++; } } return
result; }