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

解题思路:

  1. 先将两个数组进行合并,可以利用C语言的memcpy函数进行;

  2. 将新数组进行冒泡排序;

  3. 过滤掉重复元素;

代码如下:

#include <stdlib.h> #include<string.h>

//冒泡排序

void sortArray(int * inArr, int arrCount)

{    

   int i = 0;    

  for (int k = 0; k < arrCount - 1; k++)    

  {        

    for (int p = 0; p < arrCount - k - 1; p++)        

    {            

       if (inArr[p] > inArr[p + 1])            

      {                

         int temp = inArr[p];                

        inArr[p] = inArr[p + 1];                

         inArr[p + 1] = temp;            

      }        

    }    

  }

}

/* function:merge two arrays into one new array and sort its element by asc, then filter the dunplicate elements.

input: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)

{        

  if (pArray1 == NULL || pArray2 == NULL || pOutputArray == NULL || iOutputNum == NULL) return;    

   if (iArray1Num == 0 && iArray2Num == 0) return;    

  int *  pTempArray = (int *)malloc(sizeof(int) * (iArray1Num + iArray2Num));    

   if (pTempArray == NULL) return;    

  memcpy(pTempArray, pArray1, iArray1Num * sizeof(int));    

   memcpy(pTempArray + iArray1Num, pArray2, iArray2Num * sizeof(int));    

  sortArray(pTempArray, (iArray1Num + iArray2Num));    

  //进行了数组剔除,并且赋值给输出数组中    

  int idx = 0;    

  pOutputArray[0] = pTempArray[0];    

  for (int q = 1; q < iArray1Num + iArray2Num; q++)    

  {        

     if (pOutputArray[idx] == pTempArray[q]) continue;        

    idx++;        

    pOutputArray[idx] = pTempArray[q];    

  }    

  *iOutputNum = idx + 1;    

   free(pTempArray);

     return;

}

原文地址:https://www.cnblogs.com/kennyael/p/10005486.html