将两个整型数组按照升序合并,并且过滤掉重复数组元素

功能: 将两个整型数组按照升序合并,并且过滤掉重复数组元素

输入: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;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值