功能: 将两个整型数组按照升序合并,并且过滤掉重复数组元素
输入:int * pArray1 :整型数组1 int iArray1Num:数组1元素个数 int * pArray2 :整型数组2 int iArray2Num:数组2元素个数
输出:int * pOutputArray:合并后的数组 int * iOutputNum:合并后数组元素个数
返回:void
#include<stdlib.h> #include<stdio.h> #include<string.h> #include "OJ.h" #define N 1000 int cmp1(const void *a, const void *b) //从小到大 { return(*(int *)a - *(int *)b); } /* 删除数组中重复的元素,返回剩下的元素个数*/ int delete_elem(int arr[], int n) { int i, j, k; int cnt = 0; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n;) { if (arr[i] == arr[j]) { for (k = j; k<n - 1; k++) { arr[k] = arr[k + 1]; } n--; } else { j++; } } } return n; } /* 功能: 将两个整型数组按照升序合并,并且过滤掉重复数组元素 输入:int * pArray1 :整型数组1 int iArray1Num:数组1元素个数 int * pArray2 :整型数组2 int iArray2Num:数组2元素个数 输出:int * pOutputArray:合并后的数组 int * iOutputNum:合并后数组元素个数 返回:void */ void CombineBySort(int * pArray1, int iArray1Num, int * pArray2, int iArray2Num, int * pOutputArray, int * iOutputNum) { int icnt = 0; int jcnt = 0; int cnt = 0; int i = 0; int total = iArray1Num + iArray2Num; int *temp = (int *)malloc(sizeof(int) * (total + 1) ); if (temp == NULL) { return; } memset(temp, 0, sizeof(int) * (total + 1)); if (pArray1 == NULL || pArray2 == NULL || iArray1Num == 0 || iArray2Num == 0) return; for (icnt = 0; icnt < iArray1Num; icnt++) { temp[icnt] = pArray1[icnt]; } for (jcnt = 0; jcnt < iArray2Num; jcnt++) { temp[iArray1Num + jcnt] = pArray2[jcnt]; } /* 库函数qsort排序*/ qsort(temp, iArray2Num + iArray1Num, sizeof(temp[0]), cmp1); cnt = delete_elem(temp, total); *iOutputNum = cnt; memcpy(pOutputArray, temp, sizeof(int) * cnt); if (temp != NULL) { free(temp); temp = NULL; } return; }