C語言實現 求兩個陣列的交集
阿新 • • 發佈:2019-01-29
題目描述
分析
其中一種邏輯比較清晰的方法就是分別對兩個陣列進行排序,再應用二路歸併排序的思想來找出交集。下面是實現的程式碼,其中採用的排序方法是選擇排序。程式碼實現
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;
}